如果用户的会话时间超过30分钟,我想退出用户。这段代码是否正确?
如果是的话,有人可以解释一下吗?
如果没有,你能告诉我什么是问题和解决方案吗?
如果我不使用这个到期时间,网站将是不安全的?
if((mktime() - $_SESSION['started'] - 60*30) > 0){
//logout, destroy session etc<br>
}
}else{
$_SESSION['started'] = mktime();
}
答案 0 :(得分:2)
让PHP正常处理会话超时。设置在php.ini
session.gc_maxlifetime = 1440
会话所占的秒数 默认值为1440秒或24分钟。
为防止会话劫持,您可以例如
答案 1 :(得分:0)
使用time()
代替mktime()
,那么它应该是正确的。
但我会说不要只依赖$ _SESSION ...... 有更安全的方法,即基于数据库的会话管理
答案 2 :(得分:0)
首先,您应该使用time()
而不是mktime()
,因为您还没有转换日期+时间组件。
然后你应该把条件改写成更具可读性的东西:
if ( time() > $_SESSION['started'] + 60*30 ) {
根据您的使用情况,您可能还会考虑不使用“已启动”时间,但可能会使用“lastaccess”。 (您还可以在创建会话时预先定义“销毁”时间,从而简化逻辑。)
答案 3 :(得分:0)
“如果用户的会话时间超过30分钟,我想退出用户。这段代码是否正确?”
不,如果他在30分钟后没有采取行动,那么您当前的代码会断开用户的连接。 你需要:
}else if(!isset($_SESSION['started'])){
$_SESSION['started'] = mktime();
}
答案 4 :(得分:-1)
PHP已经处理了这个问题 默认情况下,会话将在24分钟不活动后过期 你不用担心。