一旦调用session_start()
,Php 始终是否会创建会话文件,即使没有任何内容可以跟踪(= $_SESSION[]
中没有写入变量)?如果是这样,为什么?
答案 0 :(得分:1)
默认基于PHP文件的会话将会话ID编码为会话文件的文件名。由于这是ID正常保存的唯一地方,因此必须保留SOMETHING以存储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);
}