【发布时间】: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? 的潜在副本,但我不同意,建议的帖子询问该函数的作用,而我的问题是询问处理场景的正确方法。 ]
【问题讨论】:
-
请注意手册中有一条注释:“仅对不使用 $_SESSION 的旧代码使用 session_unset()”。
标签: php