设置其生命周期后不会删除php会话

时间:2017-08-17 07:19:14

标签: php session cookies

我是一个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:如果不是,我们必须销毁它吗?

谢谢

1 个答案:

答案 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值将以您期望的方式运行。