2013-03-15 28 views
5

Giả sử bạn đang triển khai phiên.Tiêu đề cookie có nên được đặt trên mọi câu trả lời không?

Bạn kiểm tra xem trình duyệt có hiển thị cookie phiên hay không. Nếu có, bạn xác thực cookie và tìm người dùng mà phiên được liên kết và chuyển sang xử lý yêu cầu.

Nếu bạn không tìm thấy cookie phiên, bạn tạo phiên mới và gửi cookie đến trình duyệt mà bạn mong muốn nhận được trên các yêu cầu tiếp theo.

Bây giờ câu hỏi của tôi là: nếu bạn đã tìm thấy cookie phiên trong một yêu cầu, bạn có thể gửi lại cùng một cookie trong phản hồi không. Dưới hoàn cảnh nào đúng?

Lưu ý: Tôi hỏi đây là một lập trình viên Kim tự tháp (Python), vì việc triển khai Kim tự tháp gửi cookie phiên vô điều kiện trên mọi phản hồi. (go to code)

Trả lời

8

Nói chung, bạn không cần phải đặt cookie trên mỗi và mọi câu trả lời. Trình duyệt đã có cookie và sẽ tiếp tục gửi đến máy chủ miễn là nó vẫn hợp lệ.

Cụ thể, cookie phiên Kim tự tháp được đặt trên mọi yêu cầu vì nó chứa bí mật đã ký và dấu thời gian có thể hết hạn riêng biệt với cơ chế hết hạn cookie thông thường. Bằng cách đặt cookie mới mỗi lần Kim tự tháp cập nhật dấu thời gian được nhúng để hiển thị phiên vẫn còn mới. Nói cách khác, tập hợp cookie là một tập hợp cookie khác nhau mỗi lần.

+0

Vâng, bạn đã đúng!Việc thực hiện phiên mặc định trong cửa hàng Kim tự tháp truy cập thời gian trong cookie - mà nó cần phải cập nhật trên mọi yêu cầu, do đó đặt lại cookie trên mọi câu trả lời. Và, các triển khai thay thế như [pyramid_beaker] (https://github.com/Pylons/pyramid_beaker/blob/master/pyramid_beaker/__init__.py) và [pyramid_redis_sessions] (https://github.com/ericrasmussen/pyramid_redis_sessions/blob/ master/pyramid_redis_sessions/__ init__.py) không làm điều đó một cách vô điều kiện. Bạn đúng. – treecoder

6

Để có phiên phiên cookie (như trong, cookie phiên trình duyệt mà khách hàng sẽ hủy ngay khi đóng) Tôi có thể không làm điều này. Nó không đạt được bất cứ điều gì đặc biệt và nó là một sự lãng phí băng thông (mặc dù một số lượng nhỏ) để giữ lặp đi lặp lại chính mình như thế này.

> Ở đây có cookie.
< Cảm ơn!
> Không thực sự, có cookie.
< Đó không phải là cùng một cookie?
> Nghiêm túc, có cookie này.
< Dừng lại.

Chỉ cần gửi lại cookie khi bạn đang thay đổi điều gì đó về nó. Vì vậy, đối với cookie có thời gian hết hạn tuyệt đối, bạn có thể muốn gia hạn thời gian hết hạn thường xuyên. Rõ ràng nếu bạn đang thay đổi giá trị được lưu trữ trong cookie, bạn cũng sẽ gửi lại tiêu đề.

Tôi thường là nhà phát triển PHP và các phiên bản gốc PHP thực hiện việc này (gửi mỗi lần vô điều kiện). Tôi tưởng tượng lý do cho việc này là a) dễ thực hiện hơn và b) nó cố gắng tính đến các tác nhân người dùng không hoạt động như họ nên, có thể bỏ qua thời gian hết hạn hoặc không ghi cookie vào lưu trữ liên tục của ứng dụng khách hoặc < chèn khác lẻ hành vi ở đây >.

Nếu mọi người thực hiện 2109/2965 đúng cách, hoàn toàn không có lý do nào để đặt cookie giống hệt về mặt ngữ nghĩa nhiều lần. Nhưng cuộc sống của một nhà phát triển sẽ không buồn tẻ nếu mọi người thực sự đọc các tiêu chuẩn?

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