设置登录时会话的到期时间

时间:2010-11-23 23:54:32

标签: php session

在我的登录脚本中,我放了一个复选框,人们可以检查是否要保持登录状态。我已将复选框命名为“stayin”。

现在,问题在于,当用户直接访问登录页面的索引时,会话已经设置(并且当“会话结束”时它会过期 - 或者更确切地说当浏览器关闭时)。所以,假设您已经标记了“保持登录状态”框,您浏览了该页面,然后关闭了浏览器并返回 - 您仍然无法登录,因为设置会话生命周期不起作用,因为索引脚本始终在没有特定生命周期的情况下设置会话。由于不是每个人都希望一直登录,所以在使用session_start()之前我无法将“session_set_cookie_parameters”设置为“never”到期(这就是为什么session_set_cookie_params在我的脚本中使用AFTER session_start()(I)我不确定这是否真的有用)。

因此,对于索引脚本,我只使用session_start();并检查“用户名”是否有值,并将用户重定向到登录名。 对于动作脚本:

<?php
session_start();
if(isset($_POST['stayin'])){ // In case they want to be kept logged in.
session_set_cookie_params(999999999,"/path");
}
?>

我在每个脚本的最顶部使用session_start()。 使用PHP 4.4.9版。

3 个答案:

答案 0 :(得分:0)

AFAIK session_set_cookie_params()仅在脚本运行期间修改会话cookie长度(请参阅http://www.php.net/manual/en/function.session-set-cookie-params.php)。永久更改它的唯一方法是修改php.ini文件中的条目,但这会将所有会话更改为长时间超时,这也不是您想要的。使用客户端cookie是一种选择而不是使用服务器端会话吗?如果是这样,您可以使用setcookie()根据用户是否勾选了复选框来单独设置cookie的生命周期。

<?php
if(isset($_POST['stayin'])){ // In case they want to be kept logged in.
   setcookie('logincookie', true, 999999999, '/path');
}
?>

答案 1 :(得分:0)

你可能想要使用$ _COOKIES而不是$ _SESSION。以下是您的阅读材料:

http://www.tuxradar.com/practicalphp/10/1/0

答案 2 :(得分:0)

如何设置会话cookie到期时间的最佳方法是:

$cookie = session_get_cookie_params();
session_set_cookie_params( 2851200, $cookie['path'], $cookie['domain'],
$cookie['secure']);
相关问题