Php 是否总是在调用session_start()
时立即创建会话文件,即使没有什么可跟踪的(=没有用$_SESSION[]
编写的变量)?如果是,为什么?
发布于 2014-03-07 11:52:21
默认的基于PHP文件的会话将会话ID编码为会话文件的文件名。因为这是唯一正常保存id的地方,所以必须保留一些东西来存储ID。这意味着您将创建一个文件,即使没有任何东西写入$_SESSION
。
在类似PHP的伪代码中,基本上出现了这样的情况:
function session_start() {
if (isset($_COOKIE[ini_get('session.name')])) {
// session ID was sent from client, get it
$id = $_COOKIE[ini_get('session.name')];
} else {
// no session ID received, generate one
$id = generate_new_id();
setcookie(ini_get('session.name'), $id, ......);
}
$session_file = ini_get('session.save_path') . '/sess_' . $id;
if (file_exists($session_file)) {
// found a session file, load it
$raw_data = file_get_contents($session_file);
$_SESSION = unserialize($raw_data);
} else {
// brand new session, create file and initialize empty session
file_put_contents($session_file, serialize(array());
$_SESSION = array();
}
// lock the session file to prevent parallel overwrites.
flock($session_file);
}
https://stackoverflow.com/questions/22259319
复制