我是一个php新手,并使用php会话练习。基本上,我有一个登录表单,只有在会话不存在时才会向用户显示,否则页面会显示"用户已经登录"。 我使用以下方法设置了会话生命周期和cookie时间:
function numberWithCommas(x) {
setTimeout(function(){
if(x.value.lastIndexOf(".")!=x.value.length-1){
var a = x.value.replace(",","");
var nf = new Intl.NumberFormat();
console.log(nf.format(a));
x.value = nf.format(a);
}
},1);
}
我想在 session_set_cookie_params(60);
ini_set('session.gc_maxlifetime', 60);
之后销毁会话,以便用户必须再次登录。但在我的实现中,会话仍然存在很长时间并且用户已登录。
在我的1 minute
我有:
1:如果使用POST req访问login.php,则检查登录凭据
2:如果设置了SESSION [' logged_in'],则不显示表单,echo"已登录"
login.php
然后在我的<?php
require_once("helpers.php");
session_start();
if(!empty($_POST)){
loginUser($_POST['user_id'], $_POST['pass']);
}
<?php
if(!isset($_SESSION['logged_in'])){
echo "<br>SESSION IS NOT SET UP";
?>
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css" href="style.css">
<SCRIPT src="test.js"></SCRIPT>
</HEAD>
<BODY>
<H1>Please login</H1>
<FORM action="login.php" method="post">
<span class=formlabel>Username:</span>
<INPUT name="user_id" type="text" class="forminput" require><BR>
<span class=formlabel>Password:</span>
<INPUT name="pass" type="password" class="forminput" require><BR>
<INPUT type="submit" value="Login" style="width:80px;margin-left:100px;margin-top:3px;"><BR><BR>
Don't have an account? <A href="register.php">Click here to register</A>.
</FORM>
</BODY>
</HTML>
<?php
}else{
echo '<strong>user already logged in.<br></strong>';
}
?>
我有一个功能:
1:检查数据库中的用户ID和密码
2:如果存在则设置会话。
helper.php
现在,当我以用户身份登录时,会话开始,登录表格消失,这是我想要的正确行为。但是会话永远不会结束,我的意思是即使我在10分钟后刷新页面,表单也不会显示并说“用户已登录&#34;。
也:
1:会话在maxLifetime后自行销毁吗?
2:如果不是,我们必须销毁它吗?
谢谢
答案 0 :(得分:1)
gc_maxlifetime
值是数据被视为垃圾并且可能清理后的秒数。您需要确保将此值设置得足够高,以便您的会话不会过早销毁,但是您不能依赖会话在这段时间后被销毁。
如果您希望在特定时间段后销毁会话,则应存储时间戳,然后使用该时间戳和会话的存在来查看会话是否仍处于活动状态。像这样:
$_SESSION['last_access'] = time();
然后,检查它是否仍然有效:
if ( isset( $_SESSION['last_access'] ) && $_SESSION['last_access'] - 60 > time() ) {
// The session is still alive
} else {
// The session should be destroyed
session_destroy();
unset( $_SESSION );
}
然后,您将来检查是否存在任何$_SESSION
值将以您期望的方式运行。