2012-02-11 28 views
6

Tôi đang cố gắng tìm hiểu cách phiên hoạt động trong Codeigniter. Đọc hướng dẫn trực tuyến, tôi thấy như sau:Cách phiên làm việc trong Codeigniter

Nếu dữ liệu phiên không tồn tại (hoặc nếu hết hạn), phiên mới sẽ được tạo và lưu trong cookie. Nếu một phiên tồn tại, thông tin của nó sẽ được cập nhật và cookie sẽ được cập nhật. Với mỗi lần cập nhật, session_id sẽ được tạo lại.

Lưu ý: phiên cookie chỉ được cập nhật mỗi năm phút theo mặc định để giảm tải xử lý. Nếu bạn liên tục tải lại một trang, bạn sẽ nhận thấy rằng thời gian "hoạt động cuối cùng" chỉ cập nhật nếu năm phút trở lên đã trôi qua kể từ lần cuối cùng cookie được ghi. Thời gian này được cấu hình bằng cách thay đổi dòng $ config ['sess_time_to_update'] trong tập tin hệ thống/config/config.php của bạn.

Câu hỏi:

  1. Những thông tin được cập nhật nếu một phiên tồn tại khi một trang với lớp session được nạp? Đây có phải là id phiên được lưu trữ trong cookie hay dữ liệu phiên được lưu trữ trong cơ sở dữ liệu không?
  2. Cookie phiên chỉ được cập nhật sau mỗi 5 phút. Điều gì xảy ra nếu người dùng chuyển từ trang A sang trang B trong vòng 5 phút và điều này yêu cầu bổ sung dữ liệu phiên mới? Về mặt logic dữ liệu phiên nên được cập nhật, vì vậy tôi đoán tôi hiểu sai dòng này ... Trong trường hợp này, tôi sẽ đoán rằng cookie phiên sẽ nhận được id phiên mới sau mỗi 5 phút.

Mọi giải thích sẽ hữu ích!

+0

Tôi cũng có một sự nhầm lẫn. và tôi phải nói một hành vi lạ Trên CI 1.7.2. Khi tôi sử dụng DB loại ứng dụng phiên làm việc tốt. nhưng trong trường hợp DB type false làm cho ứng dụng rất chậm. bất kỳ đề xuất? –

Trả lời

2

Có, là về id phiên được lưu trữ trong cookie. Điều này được tái sinh sau mỗi 5 phút. Và khi đó là thời gian để tạo lại, đầu tiên nó sẽ nhận dữ liệu phiên hiện tại và gán nó cho id phiên mới.

mã từ thư viện phiên CI, chức năng sess_update():

// Save the old session id so we know which record to 
// update in the database if we need it 
$old_sessid = $this->userdata['session_id']; 
$new_sessid = ''; 
while (strlen($new_sessid) < 32) 
{ 
    $new_sessid .= mt_rand(0, mt_getrandmax()); 
} 

// To make the session ID even more secure we'll combine it with the user's IP 
$new_sessid .= $this->CI->input->ip_address(); 

// Turn it into a hash 
$new_sessid = md5(uniqid($new_sessid, TRUE)); 

// Update the session data in the session data array 
$this->userdata['session_id'] = $new_sessid; 
$this->userdata['last_activity'] = $this->now; 
+0

thực sự cảm ơn thông tin hữu ích này và SO cho tình yêu lập trình. –

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