欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

自定义session处理 关于read write顺序有关问题

程序员文章站 2022-03-10 14:53:19
...
自定义session处理 关于read write顺序问题
本帖最后由 hxx_yang 于 2015-04-10 13:00:11 编辑 header("content-type:text/html;charset=utf-8");

define('SESSION_PRE', 'XX_');
define('BR', '
');
function start ($savePath , $sessionName) {
global $sessionPath;
$sessionPath = $savePath . DIRECTORY_SEPARATOR;
echo __METHOD__ . BR;
return true;
}

function close () {
echo __METHOD__ . BR;
return true;
}

function read ($sessionId) {
global $sessionPath, $sessionFile;
$sessionFile = $sessionPath . DIRECTORY_SEPARATOR . ESSION_PRE . $sessionId;
echo __METHOD__ . BR;
return @file_get_contents($sessionFile);

}

function write ($sessionId , $data) {
global $sessionFile;
$sessionFile = $sessionPath . DIRECTORY_SEPARATOR . ESSION_PRE . $sessionId;
echo __METHOD__ . BR;
return @file_put_contents($sessionFile,$data);
}

function destroy ($sessionId) {
global $sessionFile;
@unlink($sessionFile);
echo __METHOD__ . BR;
return true;
}

function gc ($maxLifeTime) {
echo __METHOD__ . BR;
global $sessionPath;
foreach(glob($sessionPath."/*") as $file){
if (filemtime($file)+$maxLifeTime @unlink($file);
}
}
return true;
}
session_set_save_handler("start", "close", "read", "write", "destroy", "gc");

session_start(); //101行
$_SESSION['name'] = 'Lielei'; //102行
print_r($_SESSION); //103行
?>

问题描述:
按我的理解session_start()开启后,依次运行的函数是 start , read, write , close。
官方资料:PHP 会在脚本执行完毕或调用 session_write_close() 函数之后调用write函数。

那么,在第一次运行此脚本到103行时,为什么会输出Lilei呢,此时$_SESSION中的数据是
从session文件中读取出来的吗?如果是,脚本不是还没有结束吗,怎么会执行write呢?如果不是,
此时的$_SESSION只是相当于普通的数组吗?103行不过是输出一个普通的数组而已嘛?
------解决思路----------------------
頁面未結束,不會執行session_write_close(); 所以不會更新到session文件,你讀取的只是內存中的session的值。
自定义session处理 关于read write顺序有关问题

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 自定义session处理 关于read write顺序有关问题
  • 专题推荐