2010-06-01 44 views
7

Làm cách nào để sử dụng phiên trong bảng cơ sở dữ liệu với php và mysql?đặt phiên trong cơ sở dữ liệu trong php

+1

Bạn có thể cung cấp thêm thông tin cho chúng tôi không? Chính xác thì bạn sẽ làm gì với các phiên? – 2ndkauboy

+2

Bạn có thể muốn tìm kiếm trên Google trước tiên. Một trong những liên kết đầu tiên mà nó sẽ cung cấp cho bạn là điều này, ví dụ: http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/ – nico

+0

Thông thường phiên được lưu trữ trong các tệp tạm thời trong máy chủ. Tôi muốn lưu trữ phiên trong bảng cơ sở dữ liệu. – shin

Trả lời

18

Bạn sẽ cần phải tạo một đối tượng như vậy:

class SessionHandler 
{ 
    private static $lifetime = 0; 

    private function __construct() //object constructor 
    { 
     session_set_save_handler(
      array($this,'open'), 
      array($this,'close'), 
      array($this,'read'), 
      array($this,'write'), 
      array($this,'destroy'), 
      array($this,'gc') 
     ); 
    } 

    public function start($session_name = null) 
    { 
     session_start($session_name); //Start it here 
    } 

    public static function open() 
    { 
     //Connect to mysql, if already connected, check the connection state here. 

     return true; 
    } 

    public static function read($id) 
    { 
     //Get data from DB with id = $id; 
    } 

    public static function write($id, $data) 
    { 
     //insert data to DB, take note of serialize 
    } 

    public static function destroy($id) 
    { 
     //MySql delete sessions where ID = $id 
    } 

    public static function gc() 
    { 
     return true; 
    } 
    public static function close() 
    { 
     return true; 
    } 
    public function __destruct() 
    { 
     session_write_close(); 
    } 
} 

Sau đó, trước khi session_start khởi lớp này!

include 'classes/sessionHandlerDB.php'; 

$session = new SessionHandler(); 

$session->start('userbase'); 

$_SESSION['name'] = 'Robert Pitt'; //This is sent to SessionHandler::write('my_id','Robert Pitt') 
echo $_SESSION['name']; //This calls SessionHandler::read($id)//$id is Unique Identifier for that 

http://php.net/manual/en/function.session-set-save-handler.php

http://php.net/manual/en/function.serialize.php

+0

Bạn có thể cho tôi biết làm cách nào để sử dụng mã này để đặt phiên không? Có sự khác biệt nào với cài đặt phiên bình thường không? – shin

+0

Cơ bản bạn sử dụng $ _SESSION ... Điều này sẽ truy vấn SessionHandler, có nghĩa là trình xử lý phiên là người trung gian, nó tạo dữ liệu và trả về dữ liệu, Nếu bạn áp dụng trình xử lý của riêng mình, bạn có thể lưu trữ theo cách bạn muốn, DB, File etc Thực hiện điều này sẽ cho PHP biết rằng khi bạn sử dụng Session để truy vấn lớp này cho dữ liệu. aslong như bạn bao gồm các tập tin này và tạo ra một thể hiện của nó tất cả mọi thứ khác bạn làm sẽ không thay đổi chấp nhận phương pháp lưu trữ sẽ được DB. Ive cập nhật bài viết của tôi, xin vui lòng xem xét – RobertPitt

+0

Ngoài ra mã này là hoàn toàn ví dụ, tôi sẽ mở rộng nó để có một đối tượng lưu trữ để bạn giảm các cuộc gọi đến db, cũng nhìn vào MemCached! – RobertPitt

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