我是一名php新手,正在练习php会话。基本上,我有一个登录表单,只有当会话不存在时才会显示给用户,否则页面显示“用户已登录”。 我已经设置了会话寿命以及使用的cookie时间:php会话在设置其生存期后没有被删除
session_set_cookie_params(60);
ini_set('session.gc_maxlifetime', 60);
我想1 minute
后要销毁的会话,这样,用户将不得不重新登录。但在我的实现,会话仍然存在很长一段时间,用户登录
在我login.php
我有:
1:如果用POST REQ访问的login.php,然后检查登录凭据
2 :如果SESSION [“LOGGED_IN”]设置,那么不显示的形式,回声“已经登录”
<?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>';
}
?>
然后在我的helper.php
我有一个函数: 1:检查数据的用户ID和密码基地
2:如果它存在,然后设置会话。
function loginCheck($user_id, $pass){
//here goes code which checks if user_id & pass exists
//store in $RESULT if exists
if(!empty($result)){
session_set_cookie_params(30, '/');
ini_set('session.gc_maxlifetime', 30);
$_SESSION['username'] = $user_id;
$_SESSION['logged_in'] = true;
}
}
现在,当我以用户身份登录时,会话开始并且登录表单消失,这是我想要的正确行为。但会议永远不会结束,我的意思是即使我刷新页面10分钟后表单不显示,并说“用户已登录”。
另请参见:
1:会话在maxLifetime之后会自行销毁吗?
2:如果没有,我们必须销毁它?
谢谢
您需要在启动会话之前设置会话参数*。 – jeroen
@ jeroen如果我在sessiont_start()之前设置了会话参数,那么会话会在指定的时间段后被销毁和重置吗? –