即使在浏览器关闭后,是否可以保持会话?

时间:2010-09-10 12:34:22

标签: php session

任何人都可以告诉如何维护会话(在PHP中),以便保留会话,并且即使在重新启动浏览器后也可以访问。

一般情况下,会话会在关闭浏览器时到期,但我希望会话不被关闭,以便下次使用浏览器时可以访问会话数据。

6 个答案:

答案 0 :(得分:19)

在开始会话之前使用session_set_cookie_parameters()为会话Cookie提供非零生命周期,或将session.cookie_lifetime设置为非零。

答案 1 :(得分:8)

这是矛盾的 会话代表“直到浏览器关闭” 会话是过期的。
如果你不希望它过期,你可能根本不想要一个会话。

您可能正在使用cookie或数据库搞乱会话。

答案 2 :(得分:4)

php中的会话(以及大多数网络技术)的工作方式如下:

您将会话ID存储在客户端计算机上的cookie中。

当客户端访问您的网站时,他会向您发送会话ID。

服务器在具有会话ID的文件中查找会话数据并加载它。

因此关闭浏览器对会话没有影响,但是如果浏览器在关闭时清空cookie(我不认为任何浏览器会这样做)。

如果您确定用户始终登录,您可以将其用户/密码存储在他的cookie中,但这不是很安全。

答案 3 :(得分:2)

我发现最简单和最好的是,我们应该在每个页面上输入这个会话

而不仅仅是session_start
$expire = 365*24*3600; // We choose a one year duration

ini_set('session.gc_maxlifetime', $expire);

session_start(); //We start the session 

setcookie(session_name(),session_id(),time()+$expire); 
//Set a session cookies to the one year duration

答案 4 :(得分:0)

您可以执行以下操作:(请参阅session_set_cookie_parameters()session_name()

// long long time
$sessionTime = 365 * 24 * 60 * 60;
$sessionName = "my_session";
session_set_cookie_params($sessionTime);
session_name($sessionName);
session_start();

if (isset($_COOKIE[$sessionName])) {
    setcookie($sessionName, $_COOKIE[$sessionName], time() + $sessionTime, "/");
}

对于$sessionTime,另请参阅this question

答案 5 :(得分:-1)

如果您使用Cookie而不是会话,则可以执行此操作。