Cookies so với phiên


188

Tôi đã bắt đầu sử dụng PHP vài tháng trước. Để tạo hệ thống đăng nhập cho trang web của tôi, tôi đã đọc về cookie và phiên và sự khác biệt của chúng (cookie được lưu trữ trong trình duyệt của người dùng và các phiên trên máy chủ). Vào thời điểm đó, tôi thích cookie (và ai không thích cookie?!) Và chỉ nói: "ai quan tâm? Tôi không có bất kỳ thỏa thuận tốt nào với việc lưu trữ nó trong máy chủ của mình", vì vậy, tôi đã tiếp tục và sử dụng cookie cho dự án tốt nghiệp cử nhân của tôi. Tuy nhiên, sau khi thực hiện phần lớn ứng dụng của mình, tôi nghe nói rằng đối với trường hợp cụ thể lưu trữ ID người dùng, các phiên là phù hợp hơn. Vì vậy, tôi bắt đầu suy nghĩ về những gì tôi sẽ nói nếu bồi thẩm đoàn hỏi tôi tại sao bạn sử dụng cookie thay vì phiên? Tôi chỉ có lý do đó (rằng tôi không cần lưu trữ thông tin nội bộ về người dùng).? hay nó còn hơn thế nữa?
Bạn có thể vui lòng cho tôi biết về những lợi thế / bất lợi của việc sử dụng cookie để giữ ID người dùng không?

Cảm ơn tất cả các bạn trong StackOverflow!


2
Cả hai phương pháp lưu trữ dữ liệu . Cookies làm như vậy ở phía khách hàng, tức là trên bộ lưu trữ thiết bị của khách truy cập của bạn. Phiên là một "phần mở rộng" thông minh ở chỗ chúng chỉ lưu trữ một ID duy nhất ở phía máy khách và tất cả dữ liệu thực tế ở phía máy chủ. Khi họ nhận được ID duy nhất từ ​​cookie của khách hàng, họ sẽ biết dữ liệu nào sẽ được tải trên máy chủ. Trong hầu hết các trường hợp, phiên sẽ là những gì bạn cần. Nhân tiện, bạn có thể quản lý cả hai với github.com/delight-im/PHP-Cookie theo cách hiện đại hơn.
caw

Bên cạnh đó, lõi WordPress đã từ bỏ việc sử dụng các phiên từ nhiều năm trước và hiện chỉ sử dụng cookie . Hấp dẫn. Tôi tự hỏi liệu họ đã làm điều đó để giúp triển khai dễ dàng hơn trên một tập hợp các máy chủ cân bằng tải và / hoặc để giảm đăng xuất ngẫu nhiên do thu gom rác phiên.
Simon East

Câu trả lời:


228

Khái niệm này đang lưu trữ dữ liệu liên tục trên các trang tải cho khách truy cập web. Cookies lưu trữ nó trực tiếp trên máy khách. Các phiên sử dụng cookie làm khóa của các loại, để liên kết với dữ liệu được lưu trữ ở phía máy chủ.

Nên sử dụng phiên vì các giá trị thực được ẩn khỏi máy khách và bạn kiểm soát khi dữ liệu hết hạn và trở nên không hợp lệ. Nếu tất cả dựa trên cookie, người dùng (hoặc tin tặc) có thể thao túng dữ liệu cookie của họ và sau đó phát yêu cầu đến trang web của bạn.

Chỉnh sửa: Tôi không nghĩ có bất kỳ lợi thế nào khi sử dụng cookie, ngoài sự đơn giản. Nhìn vào nó theo cách này ... Người dùng có lý do gì để biết ID # của họ không? Thông thường tôi sẽ nói không, người dùng không cần thông tin này. Đưa ra thông tin nên được giới hạn trên cơ sở cần biết. Điều gì xảy ra nếu người dùng thay đổi cookie của mình để có ID khác, ứng dụng của bạn sẽ phản hồi như thế nào? Đó là một rủi ro bảo mật.

Trước khi các phiên là tất cả các cơn thịnh nộ, về cơ bản tôi đã thực hiện riêng của mình. Tôi đã lưu trữ một giá trị cookie duy nhất trên máy khách và lưu trữ dữ liệu liên tục của tôi trong cơ sở dữ liệu cùng với giá trị cookie đó. Sau đó, trên các yêu cầu trang tôi đã khớp các giá trị đó và có dữ liệu liên tục của tôi mà không để khách hàng kiểm soát đó là gì.


29
@JiminyCricket Tôi không nghĩ đó là sự thật ... nếu vậy, không ai sẽ sử dụng các biến phiên để lưu trữ người dùng hiện đang đăng nhập - và mọi người đều làm như vậy. Nó sẽ là một rủi ro an ninh rất lớn. Khá chắc chắn rằng thông thường ID phiên được lưu trữ NHƯ cookie trên máy khách và sau đó được khớp với phía máy chủ với dữ liệu phiên. Máy chủ thường không kiểm soát các phiên thông qua địa chỉ IP, thay vào đó thông qua giá trị cookie.
John M.

1
Gần đây tôi mới bắt đầu chỉ sử dụng lại cookie, hoàn toàn vì các phiên làm cho các trang không tải nếu có một trang khác hiện đang được thực thi từ cùng một phiên, trừ khi bạn mở đầu từng trang mỗi session_write_close();khi bạn cần. Việc tạo ID duy nhất của riêng bạn và khớp với các cookie đơn giản không phải là điều khó khăn và giữ cho tất cả các trang đều đẹp và linh hoạt.
Brian Leishman

Bạn có nghĩ rằng tôi nên sử dụng phiên để xác thực? Liệu nó có bất kỳ rủi ro bảo mật? Làm thế nào về một hacker cố gắng thay đổi id phiên của mình, máy chủ sẽ phản hồi như thế nào (giả sử id phiên đoán là hợp lệ)?
O-BL

Sử dụng phiên và sau đó 2FA là phiên có thể bị tấn công.
Zakir Sajib

119

Những ý tưởng cơ bản để phân biệt giữa hai.

Phiên:

  1. IDU được lưu trữ trên máy chủ (tức là phía máy chủ)
  2. An toàn hơn (vì 1)
  3. Không thể hết hạn, các biến phiên sẽ hết hạn khi người dùng đóng trình duyệt. (ngày nay, nó được lưu trữ trong 24 phút như mặc định trong php)

Bánh quy:

  1. IDU được lưu trữ trên trình duyệt web (tức là phía máy khách)
  2. Không an toàn lắm, vì tin tặc có thể truy cập và lấy thông tin của bạn (vì 1)
  3. Có thể đặt hết hạn (xem setcookies () để biết thêm thông tin)

Phiên được ưu tiên khi bạn cần lưu trữ thông tin / giá trị ngắn hạn, chẳng hạn như các biến để tính toán, đo lường, truy vấn, v.v.

Cookies được ưu tiên khi bạn cần lưu trữ thông tin / giá trị dài hạn, chẳng hạn như tài khoản của người dùng (để ngay cả khi họ tắt máy tính trong 2 ngày, tài khoản của họ vẫn sẽ được đăng nhập). Tôi không thể nghĩ ra nhiều ví dụ cho cookie vì nó không được áp dụng trong hầu hết các tình huống.


6
Hãy lưu ý: Đây KHÔNG phải là một câu trả lời hay. Nó bắt đầu khá ok nhưng nhầm lẫn mọi thứ và kết thúc với sự không rõ ràng. Đây không phải là một phiên so với giải thích cookie. Đó là phiên so với phiên + phiên giải thích cookie phiên. Cookies một mình không được ưa thích vì những lý do đã nêu. Phiên + cookie phiên được ưa thích vì những lý do đã nêu.
markus

Một sai lầm khác là bạn có ảnh hưởng đến thời gian tồn tại của phiên thông qua cấu hình PHP.
markus

1
Phiên vẫn đặt cookie trên trình duyệt người dùng, do đó, lời giải thích phía máy chủ-máy khách này không chính xác
Zalaboza

phiên hết hạn có thể được thiết lập bởi bất kỳ ứng dụng nào một cách dễ dàng. Điểm thứ 3 là sai. Thêm vào đó, bạn đã quên lượng dữ liệu có thể được lưu trữ trong cookie so với phiên. Đó là một điểm quan trọng hơn
saran3h

1
IDU có nghĩa là gì?
Simon East

44
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Đây là sự khác biệt lớn trong sự lựa chọn của bạn,

Nếu bạn muốn id được nhớ lâu, thì bạn cần sử dụng cookie; mặt khác, nếu bạn chỉ muốn trang web nhận ra người dùng cho lần truy cập này thì phiên là cách để đi.

Phiên được lưu trữ trong một tệp mà máy chủ php của bạn sẽ tạo. Để nhớ tệp nào dành cho người dùng nào, php cũng sẽ đặt cookie trên trình duyệt của người dùng giữ id tệp phiên này để trong lần truy cập tiếp theo, php sẽ đọc tệp này và tải lại phiên.

Bây giờ php theo mặc định sẽ xóa các phiên mỗi khoảng thời gian và quy ước đặt tên của phiên làm cho nó tự động hết hạn. Ngoài ra, các trình duyệt sẽ không giữ cookie giữ id phiên sau khi trình duyệt bị đóng hoặc lịch sử bị xóa.

Điều quan trọng cần lưu ý là ngày nay các trình duyệt cũng hỗ trợ một loại công cụ lưu trữ khác như LocalStorage, SessionStorage và các công cụ webdb khác mà mã javascript có thể sử dụng để lưu dữ liệu vào máy tính của bạn để ghi nhớ bạn. Ví dụ: nếu bạn mở bảng điều khiển javascript bên trong Facebook và nhập "localStorage", bạn sẽ thấy tất cả các biến mà Facebook sử dụng để ghi nhớ bạn mà không cần cookie.


16
Trên thực tế, theo mặc định, một phiên kéo dài cho đến khi người dùng đóng trình duyệt của họ, NHƯNG điều này có thể được thay đổi trong tệp php.ini bằng cách thay đổi 0 trong session.cookie_lifetime = 0 là số giây bạn muốn phiên kéo dài hoặc bởi sử dụng session_set_cookie_params ().
DOK

1
Thông tin hữu ích hơn nữa, câu hỏi như vậy nhận được nhiều câu trả lời .. tuyệt vời, cảm ơn một lần nữa DOK!
Nadjib Mami

1
Ngoài ra, hãy nhớ rằng điểm duy nhất của các tệp phiên thất bại có thể tạo. Khi cuộc tấn công kiểu dos nhỏ nhất xảy ra thông qua proxy, trình chuyển đổi ip hoặc zombie, một tệp phiên được tạo trên đĩa cứng hoặc ssd máy chủ của bạn. Nếu bạn không thể theo kịp bài viết, trang web của bạn sẽ bị sập.
Shawn E Carter

bất cứ ai cũng có thể clafiry: "CHUYÊN ĐỀ KẾT THÚC KHI NGƯỜI DÙNG ĐÓNG GÓI CỦA TÔI" 1. điều gì xảy ra nếu người dùng điều hướng awya từ trang .. sau đó quay lại mà không đóng trình duyệt. 2. nếu họ có một số cửa sổ / tab trình duyệt mở trỏ đến cùng một trang thì sao? một số ứng dụng web tại nơi làm việc bị lẫn lộn trong tình huống này, nhưng tôi không biết họ sử dụng loại cookie nào.
jcansell

1
@jcansell tốt, một cookie sẽ không bị nhầm lẫn bởi nhiều tab hoặc điều hướng đi, trong trường hợp như vậy, hầu hết các ứng dụng web này đã sử dụng lưu trữ cục bộ / lưu trữ phiên để lưu dữ liệu bằng cách sử dụng javascript
Zalaboza 27/12/17

20

khi bạn lưu #ID làm cookie để nhận ra người dùng đã đăng nhập, bạn thực sự đang hiển thị dữ liệu cho người dùng không liên quan đến họ. Ngoài ra, nếu bên thứ ba cố gắng đặt ID ngẫu nhiên làm dữ liệu cookie trong trình duyệt của họ, họ sẽ có thể thuyết phục máy chủ rằng họ là người dùng trong khi thực tế họ không phải là người dùng. Đó là một sự thiếu an ninh.

Bạn đã sử dụng cookie và như bạn đã nói, bạn đã hoàn thành hầu hết dự án. bên cạnh đó cookie có đặc quyền còn lại trong một thời gian dài, trong khi các phiên kết thúc nhanh hơn. Vì vậy, phiên không phù hợp trong trường hợp này. Trong thực tế, nhiều trang web và dịch vụ nổi tiếng và phổ biến sử dụng cookie và bạn có thể đăng nhập trong một thời gian dài. Nhưng làm thế nào bạn có thể sử dụng phương pháp của họ để tạo ra một quy trình đăng nhập an toàn hơn?

Đây là ý tưởng: bạn có thể giúp bạn sử dụng cookie: Nếu bạn sử dụng các khóa ngẫu nhiên thay vì ID để nhận ra người dùng đã đăng nhập, trước tiên, bạn không rò rỉ dữ liệu chính của mình cho người dùng ngẫu nhiên và thứ hai, Nếu bạn xem xét Ngẫu nhiên đủ lớn, sẽ khó hơn cho bất cứ ai đoán một khóa hoặc tạo một khóa ngẫu nhiên. ví dụ: bạn có thể lưu khóa dài 40 như thế này trong trình duyệt của Người dùng: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" và sẽ ít có khả năng ai đó tạo khóa chính xác và giả vờ là người khác.


1
Giải thích tốt đẹp. Tôi sử dụng GUID trong mã thông báo để nhận ra người dùng cá nhân.
Karthik

16

Câu trả lời ngắn

Quy tắc theo thứ tự ưu tiên:

  • Quy tắc 1. Không bao giờ tin tưởng đầu vào của người dùng: cookie không an toàn. Sử dụng phiên cho dữ liệu nhạy cảm.
  • Quy tắc 2. Nếu dữ liệu liên tục phải duy trì khi người dùng đóng trình duyệt, hãy sử dụng cookie.
  • Quy tắc 3. Nếu dữ liệu liên tục không phải duy trì khi người dùng đóng trình duyệt, hãy sử dụng phiên.
  • Quy tắc 4. Đọc câu trả lời chi tiết!

Nguồn: https://www.lucidar.me/en/web-dev/simes-or-cookies/


Câu trả lời chi tiết

Bánh quy

  • Cookies được lưu trữ ở phía máy khách (trong trình duyệt của khách truy cập).
  • Cookie không an toàn: khá dễ đọc và viết nội dung cookie.
  • Khi sử dụng cookie, bạn phải thông báo cho khách truy cập theo luật châu Âu (GDPR).
  • Hết hạn có thể được đặt, nhưng người dùng hoặc trình duyệt có thể thay đổi nó.
  • Người dùng (hoặc trình duyệt) có thể (được đặt thành) từ chối sử dụng cookie.

Phiên

  • Phiên được lưu trữ ở phía máy chủ.
  • Phiên sử dụng cookie (xem bên dưới).
  • Phiên an toàn hơn cookie, nhưng không thể xâm phạm.
  • Hết hạn được đặt trong cấu hình máy chủ (ví dụ php.ini).
  • Thời gian hết hạn mặc định là 24 phút hoặc khi đóng trình duyệt.
  • Hết hạn được đặt lại khi người dùng làm mới hoặc tải một trang mới.
  • Người dùng (hoặc trình duyệt) có thể (được đặt thành) từ chối sử dụng cookie, do đó phiên.
  • Về mặt pháp lý, bạn cũng phải thông báo cho khách truy cập về cookie, nhưng việc thiếu tiền lệ vẫn chưa rõ ràng.

Sự lựa chọn phù hợp

Phiên sử dụng một cookie! Dữ liệu phiên được lưu trữ ở phía máy chủ, nhưng UID được lưu trữ ở phía máy khách trong cookie. Nó cho phép máy chủ khớp một người dùng nhất định với dữ liệu phiên phù hợp. UID được bảo vệ và khó bị hack, nhưng không thể xâm phạm. Đối với các hành động nhạy cảm (thay đổi email hoặc đặt lại mật khẩu), không dựa vào các phiên không cookie: yêu cầu mật khẩu người dùng để xác nhận hành động.

Dữ liệu nhạy cảm không bao giờ được lưu trữ trong cookie (email, mật khẩu được mã hóa, dữ liệu cá nhân ...). Hãy ghi nhớ dữ liệu được lưu trữ trên một máy tính nước ngoài và nếu máy tính không riêng tư (lớp học hoặc máy tính công cộng) thì người khác có thể đọc nội dung cookie.

Nhớ tôi dữ liệu phải được lưu trữ trong các tập tin cookie, nếu không dữ liệu sẽ bị mất khi người dùng đóng trình duyệt. Tuy nhiên, không lưu mật khẩu hoặc dữ liệu cá nhân của người dùng trong cookie 'nhớ tôi'. Lưu trữ dữ liệu người dùng trong cơ sở dữ liệu và liên kết dữ liệu này với một cặp ID / khóa được mã hóa được lưu trữ trong cookie.

Sau khi xem xét các đề xuất trước đó, câu hỏi sau đây cuối cùng là điều giúp bạn lựa chọn giữa cookie và phiên:

Phải duy trì dữ liệu liên tục khi người dùng đóng trình duyệt?

  • Nếu câu trả lời là , hãy sử dụng cookie .
  • Nếu câu trả lời là không , hãy sử dụng phiên .

13

Trên thực tế, phiên và cookie không phải lúc nào cũng tách biệt. Thông thường, nhưng không phải lúc nào, phiên sử dụng cookie.

Có một số câu trả lời tốt cho câu hỏi của bạn trong những câu hỏi khác ở đây. Vì câu hỏi của bạn cụ thể là về việc lưu IDU (hoặc ID) của người dùng, tôi không nghĩ rằng nó hoàn toàn trùng lặp với những câu hỏi khác, nhưng câu trả lời của họ sẽ giúp bạn.

cookie so với phiên

Cache phiên VS phiên cookie?

Sự khác biệt giữa Phiên và Cookie là gì?


10

Cá nhân tôi sử dụng cả cookie và phiên.

Cookies chỉ được sử dụng khi người dùng nhấp vào hộp kiểm "nhớ tôi" . và cookie cũng được mã hóa và chỉ giải mã dữ liệu trên máy chủ. Nếu bất cứ ai cố gắng chỉnh sửa cookie, bộ giải mã của chúng tôi có thể phát hiện ra nó và từ chối yêu cầu.

Tôi đã thấy rất nhiều trang web nơi thông tin đăng nhập được lưu trữ trong cookie , bất kỳ ai cũng có thể chỉ cần thay đổi id và tên người dùng trong cookie để truy cập vào bất kỳ tài khoản nào.

Cảm ơn,


2

Phiên và Cookie không giống nhau.

Một phiên được sử dụng để lưu trữ thông tin từ các trang web. Thông thường các trang web không có bất kỳ ký ức để lưu trữ những thông tin này. Nhưng sử dụng chúng ta có thể lưu các thông tin cần thiết.

Nhưng Cookie được sử dụng để xác định người dùng. Sử dụng cookie, chúng tôi có thể lưu trữ dữ liệu. Đây là một phần nhỏ của dữ liệu sẽ lưu trữ trong trình duyệt web của người dùng. Vì vậy, bất cứ khi nào người dùng duyệt trình duyệt lần sau, hãy gửi lại thông tin dữ liệu cookie đến máy chủ để nhận các hoạt động trước đó.

Tín dụng: Phiên và Cookie


Điều gì nếu người dùng vô hiệu hóa cookie? Làm thế nào cookie xác định người dùng?
SohailRajput

1

Phiên cho phép bạn lưu trữ từng mẩu thông tin giống như với cookie, nhưng dữ liệu được lưu trữ trên máy chủ thay vì máy khách.


0

Như những người khác nói, Phiên là thông minh và có nhiều lợi thế hơn trong việc che giấu thông tin từ khách hàng.

Nhưng Cookie vẫn có ít nhất một lợi thế , bạn có thể truy cập Cookies của mình từ Javascript (Ví dụ: ngCookies ). Với phiên PHP, bạn không thể truy cập nó ở bất cứ đâu ngoài tập lệnh PHP.


1
Bạn có thể .. Tất nhiên không trực tiếp, hovever bạn có thể truy cập nó thông qua một số yêu cầu ajax để tập lệnh trả về dữ liệu phiên. Nhưng tôi không chắc bạn có nên.
l00k

0

Tôi sẽ chọn Phiên, trước hết phiên là an toàn hơn sau đó cookie, cookie là dữ liệu trang web của khách hàng và phiên là dữ liệu trang web của máy chủ. Cookies được sử dụng để xác định người dùng, bởi vì đó là những đoạn mã nhỏ được nhúng máy chủ của tôi với trình duyệt máy tính của người dùng. Mặt khác, Phiên giúp bạn bảo vệ danh tính của mình vì máy chủ web không biết bạn là ai vì địa chỉ HTTP thay đổi trạng thái 192.168.0.1 thành 765487cf34ert8ded .. hoặc một số khác với sự trợ giúp của phương thức GET và POST. Phiên lưu trữ dữ liệu của người dùng trong phiên ID duy nhất mà ngay cả ID người dùng không thể khớp với nhau. Phiên lưu trữ thông tin người dùng duy nhất trong tất cả các trang của một ứng dụng. Cookies hết hạn được thiết lập với sự trợ giúp của setcookies () trong khi phiên hết hạn không được đặt, nó sẽ hết hạn khi người dùng tắt trình duyệt.


0

Phiên là một nhóm thông tin trên máy chủ được liên kết với thông tin cookie. Nếu bạn đang sử dụng PHP, bạn có thể kiểm tra phiên. lưu _ vị trí đường dẫn và thực sự "xem phiên". Cookie là một đoạn dữ liệu được gửi và trả lại từ khách hàng. Cookies thường được sử dụng để tạo điều kiện cho các phiên vì nó cho máy chủ biết khách hàng đã xử lý phiên nào. Có nhiều cách khác để làm điều này (ma thuật chuỗi truy vấn, v.v.) nhưng cookie có thể phổ biến nhất cho việc này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.