php - 删除过期会话
问题描述
这是我第一次发帖。我相信我已经搜索了一些其他论坛,看看我的问题是否已经被问过,但我仍然摸不着头脑。我知道有很多关于过期会话的帖子,但我想我正在考虑一个特定的场景。
用户登录到仪表板并转到一个页面。它闲置了多长时间,然后垃圾收集器完成它的工作并清除会话。
现在,如果用户返回仪表板并单击以转到另一个页面,我希望用户返回索引页面 - 有效地注销。
我有一个注销页面,用户在选择注销时可以转到该页面。我在数据库中记录了一些数据,删除会话并重定向回主页。
我想首先检查会话是否确实存在。如果不是,则将其销毁并重定向到主页。否则,删除它。
但我的问题是,如果垃圾收集器已经清除了会话,我还需要销毁它吗?
<?php
session_start( );
if( !isset( $_SESSION['session'] ) ) {
session_destroy( );
header( "Location: /index.php" );
}
else {
// ... log the data I need in the database ...
$_SESSION['session'] = array( );
if( ini_get( "session.use_cookies" ) ) {
$params = session_get_cookie_params( );
setcookie( session_name( ), '', time( ) - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"] );
}
session_destroy( );
header( "Location: /index.php" );
}
?>
解决方案
对您的问题的简短回答:不,您不必自己破坏会话。
session_start()
将始终启动或恢复会话,并且此会话将始终“活动”。不过,此会话是否具有已登录用户的标志取决于您。
要确定用户的登录状态,您只需将一些“标志”保存到会话中,例如:userId
. 然后,之后session_start()
(登录页面除外)您可以检查此会话变量。如果存在,则用户已登录。如果不存在,则表示新用户或会话 cookie 过期的用户(已注销)。在这两种情况下,您只需重定向到登录页面。就这样。
此外,不建议session_destroy()
从常用代码调用。
推荐阅读
- javascript - 将标签添加到 d3 树路径的中心
- bixby - 如何使用函数 transaction.retrieve() 获取收据数据?
- mobx - MobX decorating a class causes function to throw TypeError
- jquery - 如何使用 Jquery 全局触发 Angular 的 ModelChange?或者如何使用 Jquery 通知角度模型更改?
- python-3.x - 使用tabula将表格从pdf导入python时出现问题
- parse-platform - 我试图使用 parse sdk for flutter 执行组合查询,但我不知道该怎么做
- javascript - 为什么这个 jQuery.animate() 函数不改变可见性?
- windows - Apache Zeppelin 在 Windows 上没有任何错误启动
- docker - Cloudbuild + lerna:正确的使用方法
- java - Hashmap updating for all keys if value is updated for a particular key