2009-02-07 23 views
11

Tôi đã quan tâm đến cách phiên làm việc nội bộ, nhưng tôi có ít kiến ​​thức về C (và không chắc chắn nơi để tìm trong nguồn PHP cho việc này).Sự hiểu biết của tôi về các phiên PHP có chính xác không?

Đây là những gì tôi hiểu phiên tại thời điểm này:

  1. Khi bạn bắt đầu một phiên người dùng được gán một id phiên được lưu trữ trong một cookie.
  2. Khi dữ liệu phiên được lưu (qua $_SESSION), nó được lưu trữ trên hệ thống tệp, với id phiên có liên quan và thời gian hết hạn.

Điều này có đúng không? Ngoài ra, phương thức mà id phiên được tạo ra là gì? Tôi cho rằng nó dựa trên thời gian nhưng nếu hai người dùng gửi yêu cầu cùng một lúc thì sao? Phương pháp nào được đặt trong nội bộ để ngăn chúng có cùng id?

Cảm ơn,

Trả lời

27

hiểu biết của tôi là của quá trình xử lý phiên họp nội bộ như sau:

Khi session_start được gọi, PHP đang tìm kiếm một thông số từ các khách hàng đã được gửi qua POST, GET, hoặc trong cookie (tùy thuộc vào cấu hình; xem session.use_cookies, session.use_only_cookiessession.use_trans_sid) với tên giá trị là session.name để sử dụng ID phiên của phiên đã bắt đầu.

Nếu tìm thấy ID phiên hợp lệ, nó cố gắng truy xuất dữ liệu phiên từ bộ nhớ (xem session.save_handler) để tải dữ liệu vào $_SESSION. Nếu không thể tìm thấy ID hoặc việc sử dụng nó, PHP sẽ tạo ID mới bằng cách sử dụng hàm băm (xem session.hash_function) trên dữ liệu của nguồn tạo dữ liệu ngẫu nhiên (xem session.entropy_file).

Khi kết thúc thời gian chạy hoặc khi số session_write_close được gọi, dữ liệu phiên trong $_SESSION được lưu trữ vào bộ nhớ được chỉ định.

1

ID phiên có lẽ chỉ là một chuỗi ký tự và số ngẫu nhiên. Ngoài ra nó sẽ là lạ nếu PHP đã không kiểm tra để thấy rằng nó là duy nhất và do đó không thể giống nhau cho hai người dùng. Đối với (1) và (2), tôi muốn nói rằng bạn là chính xác, nhưng tôi đã không làm việc với PHP gần đây, vì vậy cảm thấy tự do không tin tôi.

15

Nhìn vào php_session_create_id trong ext/session/session.c trong nguồn php

Nó đi như thế này:

  • có được thời gian trong ngày
  • có được từ xa địa chỉ IP
  • xây dựng một chuỗi với giây và micro từ thời điểm hiện tại, cùng với địa chỉ IP
  • nguồn cấp dữ liệu được cấu hình session hash function (hoặc MD5 hoặc SHA1)
  • nếu cấu hình, nuôi một số ngẫu nhiên bổ sung từ một entropy file
  • tạo ra giá trị băm thức

Vì vậy, nhận được một bản sao là khá khó khăn.Tuy nhiên, bạn nên tự làm quen với khái niệm về phiên cố định, cho phép kẻ tấn công có khả năng chọn session_id mục tiêu của họ sẽ áp dụng - xem Sessions and Cookies để có mồi tốt.

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