Các phiên PHP hoạt động như thế nào? (không phải là họ sử dụng như thế nào?


127

Các tệp phiên thường được lưu trữ trong, giả sử, /tmp/trên máy chủ và được đặt tên sess_{session_id}. Tôi đã xem xét nội dung và không thể tìm ra cách chúng thực sự hoạt động.

Tìm nạp tên biến và nội dung từ tệp rất dễ dàng. Nhưng làm thế nào để PHP biết phiên nào thuộc về ai?

Session_id dường như hoàn toàn ngẫu nhiên và một địa chỉ IP có thể có nhiều người dùng và mỗi người dùng có thể có một vài phiên nếu họ có nhiều hơn một cửa sổ trình duyệt mở.

Vì vậy, làm thế nào nó hoạt động?


Câu trả lời:


202

Trong tình hình chung:

  • id phiên được gửi đến người dùng khi phiên của anh ta được tạo.
  • nó được lưu trữ trong một cookie (theo mặc định, được gọi là PHPSESSID)
  • cookie đó được trình duyệt gửi đến máy chủ với mỗi yêu cầu
  • máy chủ (PHP) sử dụng cookie đó, chứa session_id, để biết tệp nào tương ứng với người dùng đó.

Dữ liệu trong các tệp phiên là nội dung của $_SESSION, được xê-ri hóa (nghĩa là được biểu diễn dưới dạng chuỗi - với chức năng như tuần tự hóa ) ; và không được tuần tự hóa khi tệp được tải bởi PHP, để điền vào $_SESSIONmảng.


Đôi khi, id phiên không được lưu trữ trong cookie, nhưng cũng được gửi bằng URL - nhưng ngày nay khá hiếm.


Để biết thêm thông tin, bạn có thể xem phần Xử lý phiên trong hướng dẫn sử dụng, cung cấp một số thông tin hữu ích.

Chẳng hạn, có một trang về Truyền ID phiên , giải thích cách id phiên được truyền từ trang này sang trang khác, sử dụng cookie hoặc trong URL - và tùy chọn cấu hình nào ảnh hưởng đến điều này.


5
Làm thế nào để một thiết bị di động (từ một ứng dụng gốc) xử lý các phiên thông thường? Lưu trữ ID phiên? Hay đây là OAuth đi cùng?
Adam Chờ đợi

13

Phiên làm việc của PHP như thế nào

  • Đầu tiên PHP tạo một số định danh duy nhất dài 16 byte (được lưu dưới dạng một chuỗi gồm 32 ký tự thập lục phân, ví dụ a86b10aeb5cd56434f8691799b1d9360) cho một phiên riêng lẻ.

  • Cookie PHPSESSID chuyển số nhận dạng duy nhất đó cho trình duyệt của người dùng để lưu số đó.

  • Một tệp mới được tạo trên máy chủ có cùng tên với số nhận dạng duy nhất với tiền tố sess_ (tức là sess_a86b10aeb5cd56434f8691799b1d9360.)

  • Trình duyệt gửi cookie đó đến máy chủ với mỗi yêu cầu.

  • Nếu PHP nhận được số nhận dạng duy nhất đó từ cookie PHPSESSID (trên mỗi yêu cầu), thì PHP sẽ tìm kiếm trong thư mục tạm thời và so sánh số đó với tên tệp. Nếu cả hai đều giống nhau, thì nó sẽ truy xuất phiên hiện có, nếu không, nó sẽ tạo một phiên mới cho người dùng đó.

Một phiên bị hủy khi người dùng đóng trình duyệt hoặc rời khỏi trang web. Máy chủ cũng chấm dứt phiên sau khi hết thời gian định trước của thời gian phiên. Đây là các bước cơ chế đơn giản mà PHP đang sử dụng để xử lý phiên. Tôi hy vọng bài viết này với sự giúp đỡ để hiểu cách PHP SESSION hoạt động.

Xem bài viết này để biết thêm chi tiết. Phiên làm việc của PHP như thế nào


Nhưng nếu tôi, giả sử, đăng nhập vào một trang web nhất định (còn gọi là: trong một phiên) và mở một tab mới mysite.com/cart. Tôi cũng sẽ nhận được "Xin chào Joe Doe, 5 tin nhắn, đây là danh sách giỏ hàng của bạn ..." hay còn gọi là thông tin phiên. - Nhưng tại sao trình duyệt liên quan đến tab trống này sẽ gửi bất kỳ ID phiên nào cùng với Yêu cầu NHẬN? cập nhật nhanh: Ah, tìm thấy câu trả lời: +)
Frank Nocke 24/07/18

Tôi có thể hỏi rằng làm thế nào id phiên có thể cung cấp bảo mật không? Ví dụ: Nếu người dùng đã đăng ký và đến hồ sơ của mình, thay đổi tham số url để truy cập hồ sơ người dùng khác nhau, làm thế nào id phiên có thể ngăn chặn điều này?
Andrewboy

4

ID phiên thực sự là ngẫu nhiên và được truyền trong cookie hoặc trong URL, tùy thuộc vào cấu hình. Bạn có thể đã thấy PHPSESSID = xxxx này trong một số URL, cũng có một cookie theo tên đó.


2

Các phiên trong PHP được bắt đầu bằng cách sử dụng hàm session_start (). Giống như hàm setcookie (), hàm session_start () phải xuất hiện trước bất kỳ HTML nào, bao gồm các dòng trống, trên trang. Nó sẽ trông như thế này: <?php session_start( );?><html><head> ....... vv Hàm session_start () tạo Id phiên ngẫu nhiên và lưu nó trong cookie trên máy tính của người dùng (đây là thông tin phiên duy nhất thực sự được lưu trữ ở phía máy khách. ) Tên mặc định cho cookie là PHPSESSID, mặc dù điều này có thể được thay đổi trong các tệp cấu hình PHP trên máy chủ (tuy nhiên hầu hết các công ty lưu trữ sẽ để nó một mình.) Để tham chiếu Id phiên trong mã PHP của bạn, do đó bạn sẽ tham chiếu biến $ PHPSESSID (đó là tên cookie; hãy nhớ rằng từ Cookies?)

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.