Session存储机制session存入数据库操作

更新时间:2019-10-20 19:16:58 来源:青锋建站 作者:青锋建站
  phpSession默认的存储机制是可以改变的,前提是我们理解session存储的工作过程,然后就可以改变PHP默认的session在存储机制,比如:将session写入数据库的数据表。以下是青锋建站给大家分享session的存储工作机制与session入库操作方法。

session存储机制

  简单的说,session存储机制就是将$_SESSION变量数据,存入持久数据(比如文件),以及将持久数据取回来,放入$_SESSION变量的内部。回收session:是指回收机制触发的时候,将所有这个时刻已经过期的session文件数据都销毁。
session存储机制的详细过程
  1、当session_start()运行时开始调用自定义处理机制中的”begin”、”read”函数,并进行一次回收操作(即随机调用gc函数);
  2、当脚本运行结束后-调用自定义处理机制中的”write”、”end”函数。将session数据写入、session结束了。
  3、只有执行session_destory()函数时,才会调用自定义处理机制中的”delete”函数。

自定义session存储机制

我们可以人为来设定存储机制--即由我们自己定义一个session运行过程的这6个事情!
第1步:声明:我们自己来进行session数据文件的处理!
Ini_set(“session.save_handler”,”user”);
Session_set_save_handler(“begin”,”end”,”read”,”write”,”delete”,”gc”);一次性设置6个函数名,分别代表session运行时要做的6个事情。  
第2步:覆盖自定义存储机制的6个函数
function begin(){}
function end(){}
function read(){}
function write(){}
function delete(){}
function gc(){}
  上面做完之后,后续的代码,就可以正常使用$_SESSION了,跟以前一样。对于session默认采用文件存储,一般不需要做其他处理,但对于session的其他存储方式,就需要来覆盖这6个方法,进行改变。以下我们将在sessoin入库操作中详细说明。

session入库用数据库存取session

  通常文件操作读取的速度远远低于数据库的操作,特别是数据量大的时候。我们使用数据库来存储session,当然这个过程要设计session数据表。一般需要完成以下几个过程。
1、定义用于session入库的数据表
create table session(
sid char(32) primary key,
sdate text,
stime int ,
key(stime)
)ENGINE=MYISAM DEFAULT CHARSET=UTF8;
2、声明使用数据库删除回收session-我们这里以把session入库操作封闭成类来说明
session_set_save_handler(
        array($this,"open"),
        array($this,"close"),
        array($this,"read"),
        array($this,"write"),
        array($this,"destory"),
        array($this,"gc")
        );将这个函数放在session类的构造函数中。session类的构造函数如下
function __construct()
    {
        ini_set("session.gc_probability",1);
        ini_set("session.gc_divisor",2);
        ini_set("session.gc_maxlifetime",10);
        ini_set("session.save_handler","user");
        session_set_save_handler(
        array($this,"open"),
        array($this,"close"),
        array($this,"read"),
        array($this,"write"),
        array($this,"destory"),
        array($this,"gc")
        );
        $dsn="mysql:host=localhost;port=3306;dbname=log";
        $sa=array(PDO::MYSQL_ATTR_INIT_COMMAND=>"set names utf8");
        self::$obj_pdo=new pdo($dsn,"login","login@123",$sa);
    }
3、覆写6个用于session处理的函数-我们仍然将这6个函数放在类中来使用
function open()
    {
    }
    function close()
    {
    }
    function read($sid)
    {
        $sql="select sdate from session where sid=".$sid;
        $result=self::$obj_pdo->query($sql);
        if($result)
        {
            $data=$result->fetchColumn();
        }
        return $data;
       
    }
    function write($sid,$data)
    {
        $sql="replace into session(sid,sdate,stime) values('".$sid."','".$data."',".time().")";
        $result=self::$obj_pdo->exec($sql); 
    }
    function destory($sid)
    {
        $sql="delete from session where sid='".$sid."'";
        var_dump($sql);
        $result=self::$obj_pdo->exec($sql);
    }
    function gc($maxlifetime)
    {
        echo '<br>gc<br>';
        $sql="delete from session where now()-stime>$maxlifetime";  stime为数据表中时间对应的字段名
        $result=self::$obj_pdo->exec($sql);
    }
  以上就是青锋建站给大家分享的session的存储机制详解与将session写入数据库中数据表的详细操作实例。青锋建站,提供专业的网站建设开发,SEO,网络营销服务。

转载请注明来源网址:青锋建站-http://www.sjzphp.com/webdis/session_store_851.html

电话 15632335515 | 邮箱 943703539@qq.com | QQ 943703539 | 微信 qingfengjianzhan

Copyright © 2016-2026 青锋建站 版权所有