注销后销毁会话文件

时间:2015-07-02 05:54:09

标签: php session

我有这个用于登录的代码,我在会话变量中存储以下内容:

if($do == "login") {
    session_start();
    $_SESSION["valid"] = true;
    $_SESSION["studentUniqueId"] = $user_row['studentUniqueId'];
    $_SESSION["loginName"] = $loginName;
    $_SESSION["timeout"] = $now;
} 

会话文件看起来像这样:

有效| B:1; studentUniqueId | S:5:" 10001&#34 ;; LOGINNAME | S:13:" abc@gmail.com" ;;超时| S: 19:" 2015-07-01 18:26:32&#34 ;;

我正在销毁用户会话的注销代码:

    if($do == "logout") {
                session_start();
                $_SESSION = array();
                session_unset();
                session_destroy();
            }

注销后,会话文件包含:

有效| B:0;

即使我已经使用了session_destroy(),在注销后,我的服务器Temp目录上的有效| b:0; 存在会话文件,并且临时目录的大小也会大大增加。

我想在session_destroy()/ logout之后删除这些文件,这不是现在的方式。

我的代码是否有任何问题。

1 个答案:

答案 0 :(得分:2)

编辑2 :(删除完整的会话数据,您可以使用以下代码)

ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

修改1(原始):从PHP MANUAL

尝试此操作
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Use this too
ini_set('session.gc_max_lifetime', 0);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

// Finally, destroy the session.
session_destroy();
?>