2012-11-20 26 views
11

Các chuyên gia,Phiên làm việc mã hiệu suất hết hạn được dọn dẹp như thế nào?

Tôi đang cố gắng hiểu cách phiên được dọn sạch trong Codeigniter trong trường hợp ứng dụng được định cấu hình để lưu các phiên trong bảng cơ sở dữ liệu.

Trong trường hợp của tôi, tôi có ba phiên hết hạn trong bảng phiên đó và một phiên hoạt động cho cùng một người dùng. Các hướng dẫn sử dụng tiểu bang: "Lưu ý: Lớp Session đã tích hợp bộ sưu tập rác trong đó xóa các phiên hết hạn, do đó bạn không cần phải viết thói quen của riêng bạn để làm điều đó."

Hmm, vậy khi nào phiên 'cũ' của tôi trong bảng phiên db bị xóa hoặc tôi thiếu gì đó?

cảm ơn!

+0

Trước 2.1.3 (user_data) không bị xóa, bạn phải xóa thủ công, vì vậy phiên của bạn có chứa bất kỳ user_data nào không? nếu sử dụng $ this-> session-> unset_userdata (mảng (...)); else $ this-> session-> sess_destroy() nên đủ – Philip

+0

Cảm ơn Philip nhưng tôi muốn tìm hiểu cách Codeigniter tự động dọn dẹp phiên và khi hết hạn ... – dutchman711

Trả lời

14

Dưới đây là mã nguồn có liên quan của lớp Session:

/** 
* Garbage collection 
* 
* This deletes expired session rows from database 
* if the probability percentage is met 
* 
* @access public 
* @return void 
*/ 
function _sess_gc() 
{ 
    if ($this->sess_use_database != TRUE) 
    { 
     return; 
    } 

    srand(time()); 
    if ((rand() % 100) < $this->gc_probability) 
    { 
     $expire = $this->now - $this->sess_expiration; 

     $this->CI->db->where("last_activity < {$expire}"); 
     $this->CI->db->delete($this->sess_table_name); 

     log_message('debug', 'Session garbage collection performed.'); 
    } 
} 

Chức năng này được gọi ở một nơi, trong constructor của lớp Session (hầu hết dòng cuối cùng), vì vậy một lần theo yêu cầu trong điều kiện bình thường .

$this->gc_probability được mã hóa cứng thành 5 ở đầu lớp và dường như không thể thay đổi. Tôi không chắc chắn, nhưng tôi tin rằng điều này có nghĩa là 5% thời gian (ngẫu nhiên) bộ sưu tập rác sẽ chạy, xóa các mục cũ khỏi bảng DB phiên.

Lưu ý rằng các mục nhập cũ không có ý nghĩa hoặc gây hại, việc dọn dẹp chỉ được thực hiện để bảng cơ sở dữ liệu của bạn không bị quá tải với các bản ghi cũ, vô dụng.

+0

Cảm ơn rất nhiều vì sự thấu hiểu! :) – dutchman711

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