2009-10-08 57 views
93

Tệp phiên thường được lưu trữ trong, ví dụ: /tmp/ trên máy chủ và được đặt tên theo số sess_{session_id}. Tôi đã xem xét nội dung và không thể tìm ra cách họ thực sự làm việc.Phiên làm việc PHP hoạt động như thế nào? (không phải "chúng được sử dụng như thế nào?")

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

Session_id có vẻ 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ó nhiều phiên nếu họ mở nhiều cửa sổ trình duyệt.

Vậy nó hoạt động như thế nào?

+0

Hãy xem http://stackoverflow.com/questions/523703/is-my-understanding-of-php-sessions-correct – adatapost

Trả lời

156

Trong tình hình chung:

  • id phiên được gửi đến người dùng khi phiên mình được tạo ra.
  • nó được lưu trữ trong một cookie (được gọi là, theo mặc định, PHPSESSID)
  • rằng cookie được gửi bởi trình duyệt đến máy chủ với mỗi yêu cầu
  • server (PHP) sử dụng cookie đó, có chứa các 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 tin phiên là nội dung của $_SESSION, serialized (ví dụ, biểu diễn dưới dạng một chuỗi - Với chức năng như serialize); và không được tuần tự hóa khi tệp được tải bởi PHP, để điền vào mảng $_SESSION.


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


Để biết thêm thông tin, bạn có thể xem phần Session Handling của hướng dẫn, cung cấp một số thông tin hữu ích. Ví dụ:

Ví dụ: có một trang về Passing the Session ID, giải thích cách id phiên được chuyể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.

+4

Siêu giải thích. Cảm ơn bạn rất nhiều :) – Christoffer

+1

Bạn được chào đón :-) –

+5

Thiết bị di động (từ một ứng dụng gốc) xử lý các phiên bình thường như thế nào? Lưu trữ ID phiên? Hay đây là OAuth xuất hiện? –

4

ID phiên thực sự là ngẫu nhiên và được chuyển vào 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 đó.

1

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, kể cả các dòng trống, trên trang. Nó sẽ trông như thế này: <?php session_start();?><html><head> ....... etc Hàm session_start() tạo một 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ữ trên phía khách hàng.) 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ủ (hầu hết các công ty lưu trữ sẽ để nó một mình.) Để tham khảo Id phiên trong mã PHP, bạn do đó sẽ tham chiếu biến $ PHPSESSID (đó là tên cookie; hãy nhớ rằng từ Cookies?)

7

như thế nào PHP phiên trình

  • Thứ nhất PHP tạo ra một số 16-byte dài nhận dạng duy nhất (được lưu trữ như là một chuỗi 32 ký tự thập lục phân, ví dụ a86b10aeb5cd56434f8691799b1d9360) cho một phiên cá nhân.

  • 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 tin mới được tạo ra trên máy chủ cùng tên của số nhận dạng duy nhất với tiền tố sess_ (tức sess_a86b10aeb5cd56434f8691799b1d9360.)

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

  • Nếu PHP nhận mã số duy nhất đó từ cookie PHPSESSID (trên mỗi yêu cầu), sau đó tìm kiếm PHP 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 lục phiên hiện tại, nếu không nó sẽ tạo một phiên mới cho người dùng đó.

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 khoảng thời gian phiên được xác định trước hết hạ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 sẽ giúp bạn hiểu cách PHP SESSION hoạt động.

Xem bài viết này để biết thêm chi tiết. How Does PHP Session Works

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