php会话在设置其生存期后未被删除

php会话在设置其生存期后未被删除,php,session,cookies,Php,Session,Cookies,我是一名php新手,正在练习php会话。基本上,我有一个登录表单,只有当会话不存在时才会显示给用户,否则页面会显示“用户已登录”。 我已使用以下方法设置会话生存时间和cookie时间: session_set_cookie_params(60); ini_set('session.gc_maxlifetime', 60); 我希望会话在1分钟后被销毁,以便用户必须再次登录。但是在我的实现中,会话仍然存在很长一段时间,用户已经登录 在我的login.php中,我有: 1:如果使用

我是一名php新手,正在练习php会话。基本上,我有一个登录表单,只有当会话不存在时才会显示给用户,否则页面会显示“用户已登录”。 我已使用以下方法设置会话生存时间和cookie时间:

    session_set_cookie_params(60);
    ini_set('session.gc_maxlifetime', 60);
我希望会话在
1分钟后被销毁
,以便用户必须再次登录。但是在我的实现中,会话仍然存在很长一段时间,用户已经登录

在我的
login.php
中,我有:
1:如果使用POST req访问login.php,则检查登录凭据
2:如果设置了会话['logged_in'],则不显示表单,回显“已登录”

现在,当我以用户身份登录时,会话开始,登录表单消失,这是我想要的正确行为。但会话永远不会结束,我的意思是,即使我在10分钟后刷新页面,表单也不会显示并显示“用户已登录”

另外:
1:会话在maxLifetime之后是否会自行销毁?
2:如果不是,我们就必须摧毁它吗?


谢谢

值是数据被视为垃圾并可能被清理的秒数。您需要确保该值设置得足够高,以便不会过早地销毁会话,但不能指望会话在这段时间后被销毁

如果希望在特定时间段后销毁会话,则应存储一个时间戳,然后使用该时间戳和会话的存在情况查看会话是否仍处于活动状态。大概是这样的:

$_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 );
}

然后,您将来检查是否存在任何
$\u SESSION
值将按您预期的方式工作。

您需要在启动会话之前设置会话参数。@jeroen如果我在sessiont\u start()之前设置会话参数这是否意味着会话将在指定的时间段后被销毁和重置?谢谢。另外,我在login.php中使用了session_start(),我还需要在helpers.php中使用吗?刷新页面是否会重置cookie和会话生存期?我会将创建
last\u access
索引的代码放在
helpers.php
文件中。其他代码将放在您想要验证会话的任何地方。每次调用
session\u start()。如果希望您的会话自上次页面访问后持续60秒(以便重新加载页面刷新会话),则这是所需的行为。否则,在分配索引之前,您需要检查是否存在
last\u access
索引,以便不会在每次加载时重置它。
$_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 );
}