admin 发表于 2020-11-25 09:03

php更改会话存储(session入库)

1、知识点
a)通过session_set_save_handler()更改存储
b)session_set_save_handler()必须在session_start()之前
c)有6个回调函数,open,close,read,write,destroy,gc。
4)read必须返回字符串,其他函数返回bool值

6个回调函数执行的时间:
open():开启会话执行
close():关闭会话执行
read():打开会话后就执行
write():更改会话会话的值和关闭会话之前执行,如果调用了session_destroy()就不会调用write()
destroy():调用session_destroy()的时候自动执行
gc():垃圾回收的时候自动执行。2、代码实现
<?php
//打开会话
function open() {
        global $link;
        $link=mysqli_connect('localhost','root','root','data');
        mysqli_set_charset($link,'utf8');
        return true;
}
//关闭会话
function close() {
        return true;
}
//读取会话
function read($sess_id) {
        global $link;
        $sql="select sess_value from sess where sess_id='$sess_id'";
        $rs=mysqli_query($link,$sql);
        $rows=mysqli_fetch_row($rs);
        return (string)$rows;
}
//写入会话
function write($sess_id,$sess_value) {
        global $link;
        $sql="insert into sess values ('$sess_id','$sess_value',unix_timestamp()) on duplicate key update sess_value='$sess_value',sess_time=unix_timestamp()";
        return mysqli_query($link,$sql);
}
//销毁会话
function destroy($sess_id) {
        global $link;
        $sql="delete from sess where sess_id='$sess_id'";
        return mysqli_query($link,$sql);
}
//垃圾回收
function gc($lifetime) {
        global $link;
        $expires=time()-$lifetime;        //过期时间点
        $sql="delete from sess where sess_time<$expires";
        return mysqli_query($link,$sql);
}
//更改会话存储
session_set_save_handler('open','close','read','write','destroy','gc');
//开启会话
session_start();
//session_destroy();

页: [1]
查看完整版本: php更改会话存储(session入库)