2012-06-30 36 views
10

Làm cách nào để lưu các phiên trong cơ sở dữ liệu? Tôi đã làm điều đó bằng cách sử dụng mã này:Phiên PHP trong Cơ sở dữ liệu

function write ($session_id, $session_data) 
// write session data to the database. 
{ 
    if (!empty($this->fieldarray)) { 
     if ($this->fieldarray['session_id'] != $session_id) { 
      // user is starting a new session with previous data 
      $this->fieldarray = array(); 
     } // if 
    } // if 

    if (empty($this->fieldarray)) { 
     // create new record 
     $array['session_id'] = $session_id; 
     $array['date_created'] = getTimeStamp(); 
     $array['last_updated'] = getTimeStamp(); 
     $array['session_data'] = addslashes($session_data); 
     $this->_dml_insertRecord($array); 
    } else { 
     // update existing record 
     if (isset($_SESSION['logon_user_id'])) { 
      $array['user_id'] = $_SESSION['logon_user_id']; 
     } // if 
     $array['last_updated'] = getTimeStamp(); 
     $array['session_data'] = addslashes($session_data); 
     $this->_dml_updateRecord($array, $this->fieldarray); 
    } // if 

    return TRUE; 

} // write 

Nhưng làm cách nào tôi nên xóa tự động như trước đây. Tôi có nghĩa là làm thế nào để xóa các phiên sau khi hết thời gian tự động?

+0

lý do tại sao không đơn giản tuần tự hóa đối tượng $ _SESSION? –

Trả lời

-1

Vào cuối của mã của bạn session_destroy(); để đóng phiên của bạn:

<?php 
    session_destroy(); 
?> 
1

Tôi đã phải đối phó với điều này cùng thời gian trước đây, và có 2 giải pháp, không phải trong số đó là khá, nhưng ở đây nó đi.

  1. Thứ tự sự kiện (lỏng lẻo), tập lệnh của bạn sẽ kiểm tra xem phiên có được gửi đến máy chủ hay không đã hết hạn. Ngay sau khi bạn đã thiết lập kết nối với phiên db của mình, bạn có thể xem xét chạy một truy vấn DELETE trên tất cả các bản ghi có ngày hết hạn qua dấu thời gian hiện tại. Sau đó tìm kiếm ID mà người dùng vừa gửi. Cách dọn dẹp này đang được thực hiện mỗi khi mọi người sử dụng trang web của bạn

  2. Cách tiếp theo mà bạn có thể cân nhắc là làm công việc CHRON hoặc tập lệnh tự động khác chạy thường xuyên để xóa các mục đã hết hạn bảng phiên của bạn. Đây là một phương pháp tốt nếu trang web của bạn nhận được lưu lượng truy cập nhẹ và không thường xuyên.

Kết hợp các phương pháp là vậy. Với trong tập lệnh của bạn khi bạn đang xác thực phiên của mình, hãy kiểm tra ngày hết hạn khi dữ liệu phiên được tìm thấy. nếu ID được tìm thấy, nhưng phiên đã hết hạn, hãy xóa phiên và bắt đầu phiên mới. Nếu bạn làm theo cách này, bạn sẽ không phải chạy quá nhiều vấn đề về xung đột ID hoặc nhiều truy vấn làm chậm máy chủ của bạn. Bạn vẫn có thể chạy công việc chron của bạn vào cuối mỗi ngày để chạy một dọn dẹp hoàn chỉnh.

Đảm bảo nếu hệ thống của bạn có nút đăng xuất thuộc một số loại mà hành động đăng xuất theo cách thủ công sẽ kích hoạt việc xóa phiên người dùng.

0

Hãy xem HTTP_Session2. Từ tài liệu PEAR:

HTTP_Session2 cung cấp tính năng bổ sung như lưu trữ cơ sở dữ liệu cho dữ liệu phiên sử dụng gói DB và MDB2. Nó cũng giới thiệu các phương thức mới, chẳng hạn như isNew(), useCookies(), setExpire(), setIdle(), isExpired(), isIdled() và các phương thức khác.

Nếu bạn muốn triển khai mã của mình, hãy xem mã trong MDB2.php bên trong gói đó. Nó chứa một phương pháp thu gom rác (gc), kết hợp với session_set_save_handler nên thực hiện thủ thuật.

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