【问题标题】:is session_unset() the correct way to clear and reset PHP Sessions variables?session_unset() 是清除和重置 PHP 会话变量的正确方法吗?
【发布时间】:2019-12-24 15:05:47
【问题描述】:

我正在开发 PHP 中的会话管理功能。我找到了一个展示如何实现会话超时的网页 (https://solutionfactor.net/blog/2014/02/08/implementing-session-timeout-with-php/)...我注意到他们使用 session_unset() 和 session_destroy() 方法。

我对 session_unset() 的使用感到困惑

在查看 PHP 手册 (https://www.php.net/manual/en/function.session-unset.php) 时,有注释说:

session_unset() 函数释放当前注册的所有会话变量。

注意:如果使用$_SESSION,请使用unset()注销会话变量,即unset ($_SESSION['varname']);。

注意不要使用 unset($_SESSION) 取消设置整个 $_SESSION,因为这将禁用通过 $_SESSION 超全局变量注册会话变量。

注意:只对不使用 $_SESSION 的旧代码使用 session_unset()。

这是我所拥有的,基于之前引用的页面上的示例。 ($sysTime 将是调用时传递给函数的服务器时间。

//Define SYS_SES_TIMEOUT - How many seconds is a session valid for. 1800 seconds = 30 minutes
    define("SYS_SES_TIMEOUT", 1800);
    session_start();

    function fSessionMgmnt_isExpired($sysTime){
        if(isset($_SESSION['Expire_DT']) && ($sysTime - $_SESSION['Expire_DT']) > SYS_SES_TIMEOUT){
            session_unset(); session_destroy; session_start(); 
            //redirect to login page
        }else{//proceed to next check}
    }

我的目标是,如果会话过期,则清除会话并将用户带回登录页面以重新进行身份验证......将在其中创建新会话。

根据 php 手册,我不确定 session_unset() 是否是正确的使用方法。特别是因为 session_destroy() 表示它不会取消设置与会话关联的变量,并且 session_unset() 页面注释了不推荐使用的代码。

感谢指导。

[请注意,虽然这已被标记为 PHP - Does session_unset unregister $_SESSION vars? 的潜在副本,但我不同意,建议的帖子询问该函数的作用,而我的问题是询问处理场景的正确方法。 ]

【问题讨论】:

标签: php


【解决方案1】:

session_destroy() function: 它会破坏与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。

注意:如果要终止会话,请同时删除会话 cookie。这将破坏会话,而不仅仅是会话数据。



session_unset() function: 它只删除会话中的变量,会话仍然存在。只有数据被截断。

您可以访问此link 了解更多信息并找出您真正需要的东西。

也可以看例子描述here

【讨论】:

  • 所以如果我使用 session_destroy() 然后使用 session_start() 开始一个新会话,$_SESSION 会保留上一个会话的内容和值吗?
  • @psycoperl 不,session_destroy() 之后你不会有旧的会话数据
  • 澄清我之前的评论:你可以忘记session_unset() 的存在。我不知道为什么它没有与session_register() 一起被删除。它只是 PHP/4 中早期会话实现的残余。
【解决方案2】:

session_unset() 函数用于销毁单个会话变量。但是session_destroy() 函数会破坏整个 php 会话。所以在你的情况下,最好使用session_destroy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多