Cookie và phiên là gì và chúng liên quan với nhau như thế nào?


86

Tôi đang cố gắng hiểu cookie và phiên một cách chuyên nghiệp. Tôi biết rằng khi trình duyệt kết nối với máy chủ, máy chủ sẽ "yêu cầu" trình duyệt "dán" cookie với "phpsessid" trong thư mục cookie của trình duyệt khách.

Bây giờ chúng ta đã có "phpsessid", nếu máy khách truy cập vào máy chủ, trình duyệt sẽ gửi đến máy chủ "phpsessid" và máy chủ sẽ xem thư mục tmp và nếu chúng ta có khớp, nó sẽ tải lại mọi dữ liệu mà người dùng có. khách hàng này, nhưng tôi hơi bối rối với quy trình.

Tôi sẽ rất biết ơn nếu ai đó có thể giúp tôi hiểu các quy trình tạo phiên và cookie đó - những gì đang xảy ra đằng sau hậu trường.


Có vẻ như bạn đã biết những gì đang xảy ra. Bạn muốn được khai sáng phần cụ thể nào? Phần HTTP / cookie hoặc cách PHP tải phiên lưu trữ?
mario

Cookie mà trình duyệt đang lưu với phpsessid, đây có phải là phpsessid để xác định ứng dụng khách để tạo phiên và cookie không?
Blanktext

Cookie trình duyệt có chứa id phiên php, mà nói với máy chủ "hey Tôi biết chap này", máy chủ sau đó lấy dữ liệu phiên (từ / tmp / ví dụ) và khôi phục người dùng $ _SESSION
somedev

Có, tôi biết điều đó, nhưng tôi đang hỏi, "phpsessid" này có đang sử dụng để xác định ứng dụng khách trước khi tạo phiên và cookie không, phpsessid này có bao gồm bên trong dữ liệu cookie và máy tính khách và bên trong tệp phiên tại thư mục tmp máy chủ không ?
Blanktext

Câu trả lời:


171

Hãy xem qua điều này:

Cookie phiên là cả hai cách để duy trì trạng thái của ứng dụng giữa các yêu cầu khác nhau mà trình duyệt đưa ra. Chẳng hạn, nhờ chúng mà bạn không cần phải đăng nhập mỗi khi yêu cầu một trang trên StackOverflow .

Bánh quy

Cookie là các bit dữ liệu nhỏ (dài tối đa 4KB), giữ dữ liệu trong cặp khóa = giá trị:

name=value; name2=value2

Chúng được đặt bằng JavaScript hoặc thông qua máy chủ sử dụng tiêu đề HTTP .

Cookie có thời gian hết hạn được đặt, ví dụ sử dụng tiêu đề HTTP:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

Điều này sẽ khiến trình duyệt đặt một cookie có tên name2có giá trị là value2, sẽ hết hạn sau khoảng 9 năm.

Cookie được coi là không an toàn cao vì người dùng có thể dễ dàng thao túng nội dung của họ. Đó là lý do tại sao bạn nên luôn xác thực dữ liệu cookie . Đừng cho rằng những gì bạn nhận được từ một cookie nhất thiết phải là những gì bạn mong đợi.

Cookie thường được sử dụng để duy trì trạng thái đăng nhập, nơi tên người dùng và một mã băm đặc biệt được gửi từ trình duyệt và máy chủ kiểm tra chúng với cơ sở dữ liệu để phê duyệt quyền truy cập.

Cookie cũng thường được sử dụng trong quá trình tạo phiên .

Phiên

Các phiên hơi khác nhau. Mỗi người dùng nhận được một ID phiên , được gửi trở lại máy chủ để xác thực bằng cookie hoặc bằng biến GET .

Các phiên thường tồn tại trong thời gian ngắn, điều này làm cho chúng lý tưởng trong việc lưu trạng thái tạm thời giữa các ứng dụng. Phiên cũng hết hạn sau khi người dùng đóng trình duyệt.

Phiên được coi là an toàn hơn cookie vì bản thân các biến được lưu giữ trên máy chủ . Đây là cách nó hoạt động:

  1. Máy chủ mở một phiên (đặt cookie qua tiêu đề HTTP)
  2. Máy chủ đặt một biến phiên.
  3. Trang thay đổi khách hàng
  4. Khách hàng gửi tất cả cookie, cùng với ID phiên từ bước 1.
  5. Máy chủ đọc ID phiên từ cookie.
  6. Máy chủ khớp với ID phiên từ danh sách trong cơ sở dữ liệu (hoặc bộ nhớ, v.v.).
  7. Máy chủ tìm một kết quả phù hợp, đọc các biến hiện đã có trên $_SESSIONsuperglobal.

Nếu PHP không tìm thấy sự phù hợp, nó sẽ bắt đầu một phiên mới và lặp lại các bước từ 1-7.

Bạn có thể lưu trữ thông tin nhạy cảm trên một phiên vì nó được lưu trên máy chủ, nhưng lưu ý rằng ID phiên vẫn có thể bị đánh cắp nếu người dùng, chẳng hạn, đăng nhập qua WiFi không an toàn. (Kẻ tấn công có thể đánh hơi các cookie và đặt nó làm cookie của chính nó, hắn sẽ không nhìn thấy các biến đó, nhưng máy chủ sẽ xác định kẻ tấn công là người dùng).


Đó là ý chính của nó. Bạn có thể tìm hiểu thêm trên sách hướng dẫn PHP về cả hai chủ đề này.


1
Vì vậy, điều đó có nghĩa là cookie phải được bật để các phiên hoạt động?
bigpotato

1
@Edmund: Có. Tuy nhiên, bạn có thể thiết lập nó để các ID phiên được truyền qua biến GET (có nghĩa là session_id sẽ cần phải được nối vào mỗi trang ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Madara's Ghost

Chính xác nghĩa là đóng trình duyệt trên thiết bị Android hoặc iPhone? dừng ứng dụng? tắt thiết bị? đóng tất cả các tab và thoát? vv
Vandervals

2
@SurajJain Sẽ tồn tại lâu hơn nếu không có cookie "nhớ tôi".
Madara's Ghost

4
câu hỏi khác: Khi người dùng đóng trình duyệt, làm cách nào để máy chủ nhận được thông báo bởi sự kiện này để máy chủ xóa ID phiên này? hay nó sẽ tự động hết hạn sau một thời gian?
user2774480
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.