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

WBOY
发布: 2016-06-13 12:17:45
原创
837 人浏览过

自定义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的值。
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!