随着 session的增加,管理已经不方便。这时,考虑使用 mysql 数据库管理。建立一个表管理 session 。 更改 session的存储机制,让 session 不再存在文件中,而是入库。更该存储机制,只需要在文件中增加函数session_set_save_handler() 便可。代码如下:
// 重写 session 的存储机制
function sess_open(){
}
function sess_close(){
}
functionsess_read($sess_id){
}
function sess_write($sess_id,$sess_data){
}
function sess_destroy(){
}
function sess_gc(){
}
session_set_save_handler(
);
session_start();
这要写了session_set_save_handler() ,php 就知道要更改 session的存储机制了。如果没写,那还是存到文件中。这函数的参数,分别对应了 session运行机制的各个方面。参数名字,也就是函数名,可以改变,不一定这样写,这样写是为了便于阅读理解。 执行顺序也不是从上到下,而是:open-> reader -> write -> close .
————————————————————————————————————
数据库表 session 信息:
实现 session入库功能的完整代码:
// 重写 session 的存储机制
// 最重要的三个函数: read,write,destroy。
// 有了这几个就能完成 session 功能。
// 其他的函数的函数体可以什么都不写。
function sess_open(){
}
function sess_close(){
}
functionsess_read($sess_id){
}
function sess_write($sess_id,$sess_data){
}
functionsess_destroy($sess_id){
}
function sess_gc(){
}
session_set_save_handler(
);
session_start();
var_dump($_SESSION);
$_SESSION['name'] = 'fff';
$_SESSION['age'] = '24';
//session_destroy();
——————————————————————————
总结 session 运行机制:
1. 打开 session 时,语法上执行函数 session_start() ,php 的session 机制读取浏览器端的 cookie,语法上表示为$_cookie['PHPSESSID']。
2. 根据 cookie 找到存储在服务器端的 session数据。
3. 把 session 数据反序列化,赋值给变量 $_SESSION。
4. 之后对变量 $_SESSION 的操作都是对变量的操作,不会更新 session文件。
5. 是否执行了 session_destroy() 函数,如果执行了,那么删除服务器端的session 文件。
6. 脚本结束时,判断是否有 sessin 文件,或者说是否执行过session_destroy() 方法。如果没有执行过,则把 $_SESSION 变量中的数据写入到 session文件中。如果执行过,那么什么也不做。