用户退出时是否必须销毁SESSION?

时间:2015-06-21 01:08:09

标签: php session

我只在SESSION中存储已记录的用户ID。

当用户退出时,SESSION对我来说变得毫无用处。我必须摧毁它吗?

这些是Utils类的方法,我用它来启动和销毁SESSION。

static function sessionSecureStart()
{
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
}

static function sessionSecureDestroy()
{

    //Utils::sessionSecureStart(); This part is for testing only

    if (session_status() == PHP_SESSION_ACTIVE) {
        $_SESSION = [];
        session_destroy();
    }

}

有时随机我会收到错误/警告,例如SESSION could not be destroyed....我做错了什么?

(我使用的是PHP / 5.5.25)

3 个答案:

答案 0 :(得分:2)

您不必销毁整个会话,只需要unset您不需要的部分。假设当用户登录时设置$_SESSION['user_id']并且所有显示我已登录的内容正在查找该变量。一个简单的unset($_SESSION['user_id']);突然用户退出了。请记住,您的用户无法控制会话中的内容。

另一个选择是set the session cookies to very low lifetimes。它更加粗糙但同样有效。

答案 1 :(得分:0)

我强烈建议你破坏会话。对于安全性和性能。

通常会话数据保存在服务器上的临时文件中和浏览器上的cookie中,这个只包含会话ID但没有数据。

当您调用会话销毁时,您删除此文件,但您也可以通过电话浏览器删除会话cookie(发送一个过去相同名称的cookie)。您可以知道调用PHPSESSID函数的名称(通常是New-WebBinding)。

答案 2 :(得分:0)

  

当用户退出时,SESSION对我来说变得毫无用处。我必须摧毁它吗?

是。除了销毁它之外,它还有助于生成新的session-id

  

有时随机我会收到错误/警告,如SESSION无法销毁......我做错了吗?

您无法销毁尚未启动的会话。在尝试销毁之前,请确保已成功启动与session_start();的会话