文件会话:是否始终生成?

时间:2014-03-07 19:46:26

标签: php session

一旦调用session_start(),Php 始终是否会创建会话文件,即使没有任何内容可以跟踪(= $_SESSION[]中没有写入变量)?如果是这样,为什么?

1 个答案:

答案 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);
}
相关问题