【问题标题】:Destroy the Session File after logout注销后销毁会话文件
【发布时间】:2015-07-02 05:54:08
【问题描述】:

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

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";loginName|s:13:"abc@gmail.com";timeout|s:19:"2015-07-01 18: 26:32";

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

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

注销后会话文件包含:

有效|b:0;

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

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

我的代码有什么问题吗?

【问题讨论】:

  • 你不应该调用 session_start();两次。
  • 在注销页面,你将使用 unset($_SESSION);
  • the size of the temp directory increases considerably - php 通常会运行一个 cronjob 来删除旧的会话文件。如果您的注销功能有效并且您最关心的是磁盘空间的使用 - 找出标准 cronjob which looks something like this 丢失/未运行的原因。

标签: php session


【解决方案1】:

编辑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();
?>

【讨论】:

  • 这与问题中的代码有何不同?
  • setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params[ "httponly"]);
  • Anirban 你能解释一下你的代码在做什么吗?
  • 如何操作cookie来删除服务器上的会话文件?已在问题中致电session_destroy
  • 是的,它检查 php.ini 是否允许使用 cookie 来存储会话 id,如果是,它会删除(使其生命周期为负)保存会话数据(id)的 cookie 并销毁会话
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多