2012-04-19 24 views
6

Mỗi lần $ this-> session-> set_userdata() hoặc $ this-> session-> set_flashdata() được sử dụng trong bộ điều khiển của tôi, một trường giống khác "Set-Cookie: ci_session = ..." được thêm vào tiêu đề http mà máy chủ gửi.Trường trùng lặp "set-cookie: ci-session" trong tiêu đề bởi codeigniter

Nhiều trường Đặt cookie, có cùng tên cookie, trong tiêu đề http không được theo rfc6265.

Vì vậy, có cách nào để sử dụng các phiên mã hóa mà không cần tạo nhiều "tập hợp cookie" giống hệt nhau không?

(Tôi đã sử dụng curl để xác minh header http)

Trả lời

5

séc https://github.com/EllisLab/CodeIgniter/pull/1780

Theo mặc định khi sử dụng phiên xử lý cookie (được mã hóa hay không mã hóa), CI sẽ gửi toàn bộ "Set-Cookie" tiêu đề mỗi lần một giá trị mới được ghi vào phiên. Điều này dẫn đến nhiều tiêu đề được gửi cho khách hàng.

Đây là vấn đề vì nếu có quá nhiều giá trị được ghi vào phiên, tiêu đề HTTP có thể phát triển khá lớn và một số máy chủ web sẽ từ chối phản hồi. (xem http://wiki.nginx.org/HttpProxyModule#proxy_buffer_size)

Giải pháp là chỉ chạy 'sess_save()' một lần ngay sau khi tất cả các tiêu đề khác được gửi trước khi xuất nội dung trang.

0

Tôi tin rằng bạn có thể vượt qua một mảng để $this->session->set_userdata(); tôi đã không kiểm tra mã này để nó chỉ là một gợi ý để thử một cái gì đó dọc theo những dòng:

$data = array(
    'whatever' => 'somevalue', 
    'youget' => 'theidea' 
); 

$this->session->set_userdata($data); 

NB: Khi tôi nói tôi chưa thử nghiệm mã. Tôi đã sử dụng mã này và tôi biết nó hoạt động, tôi có nghĩa là tôi đã thử nghiệm nếu nó sẽ giảm số lượng tiêu đề được gửi.

+0

Vấn đề với điều đó là codigniter tạo ra một cookie phiên đầu tiên chỉ để yêu cầu trang, vì vậy chỉ với một $ this-> session-> set_userdata() gọi sẽ có hai "Set-Cookie: ci_session =. .."S. – mathulus

+0

Cá nhân, và với kinh nghiệm từ các dự án thực sự sử dụng CodeIgniter, tôi không sử dụng các phiên CI. Tôi thích sử dụng các phiên php bản địa và các hàm phiên bản php gốc. – Dale

0

Trong trường hợp của tôi, lỗi nằm trong trình duyệt (Chrome). Nó lưu trữ 2 cookie và gửi cả hai đến máy chủ, điều này làm cho máy chủ tạo phiên mới tất cả các thời gian. Tôi đã sửa nó bằng cách xóa cookie trong trình duyệt. Hy vọng nó sẽ giúp ai đó. :)

Các vấn đề liên quan