【问题标题】:set session in database in php在php中的数据库中设置会话
【发布时间】:2011-02-26 09:06:58
【问题描述】:

如何在 php 和 mysql 中使用数据库表中的 session?

【问题讨论】:

  • 您能给我们提供更多信息吗?您究竟打算如何处理这些会议?
  • 您可能想先在 Google 上搜索。它将为您提供的第一个链接是这个,例如:devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database
  • 通常会话存储在服务器的临时文件中。我想将会话存储在数据库表中。

标签: php


【解决方案1】:

你需要像这样创建一个对象:

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();
    }
}

那么在 session_start 之前启动这个类!

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

【讨论】:

  • 您能告诉我如何使用此代码设置会话吗?和普通会话设置有什么区别吗?
  • 基本上当你使用 $_SESSION... 这将查询 SessionHandler,这意味着会话处理程序是中间人,它存储数据并返回数据,如果你应用自己的处理程序,你可以将它存储在无论如何你想要的方式,数据库,文件等执行这个会告诉 PHP 当你使用 Session 来查询这个类的数据时。只要您包含此文件并创建它的实例,您所做的一切都不会更改,接受存储方法将是 DB。我已经更新了我的帖子,请查看
  • 另外这段代码是纯粹的例子,我会将它扩展为有一个存储对象,这样你就可以减少对 db 的调用,还要看看 MemCached!
【解决方案2】:

您可以在php.ini 中的session_handler 指令下控制它。查看http://www.tonymarston.net/php-mysql/session-handler.html 以轻松浏览(以前使用过)。

【讨论】:

    【解决方案3】:

    您需要使用session_set_save_handler 编写自定义打开、关闭、读取、写入、销毁和垃圾回收函数。

    【讨论】:

      【解决方案4】:

      查看我的 github 代码 sn-p PHP5.4-DB-Session-Handler-Class,了解 PHP 5.4 中的数据库驱动会话管理类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        相关资源
        最近更新 更多