Home  >  Article  >  Backend Development  >  自定义session处理 关于read write顺序有关问题

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

WBOY
WBOYOriginal
2016-06-13 12:17:45837browse

自定义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的值。
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn