Php 即使在浏览器关闭后也可以保持会话吗?

Php 即使在浏览器关闭后也可以保持会话吗?,php,session,Php,Session,有谁能告诉我如何维护一个会话(在PHP中),这样即使在重新启动浏览器后,会话中包含的内容也能被保留和访问 通常,会话会随着浏览器的关闭而过期,但我希望会话不会关闭,以便下次使用浏览器时可以访问会话数据。如果使用cookie而不是会话,则可以这样做。用于在启动会话之前为会话cookie提供非零生存期,或者设置为非零。php中的会话(以及大多数web技术)的工作方式如下: 您将会话id存储在客户端计算机上的cookie中 当客户端来到您的站点时,他会向您发送会话id 服务器在具有会话id的文件中查找

有谁能告诉我如何维护一个会话(在PHP中),这样即使在重新启动浏览器后,会话中包含的内容也能被保留和访问


通常,会话会随着浏览器的关闭而过期,但我希望会话不会关闭,以便下次使用浏览器时可以访问会话数据。

如果使用cookie而不是会话,则可以这样做。

用于在启动会话之前为会话cookie提供非零生存期,或者设置为非零。

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

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

当客户端来到您的站点时,他会向您发送会话id

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

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

如果您想确保用户始终登录,您可以将其用户/密码存储在他的cookies中,但这并不安全。

这是矛盾修饰法。
Session代表“直到浏览器关闭”。
会话将过期。
如果你不想让它过期,你可能根本不想要一个会话


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

您可以这样做:(请参阅和)


有关
$sessionTime
,请参阅我发现的最简单和最好的方法是,我们不应该只在session\u start页面上输入,而是在每个页面上都有一个session

$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

这就不再是会话数据,而是开始成为更持久的数据(像数据库一样)?您如何用cookie记录会话?您需要使cookie在浏览器会话之后保持不变-很抱歉,我不能告诉您具体需要为PHP做什么。如果您通过向URL添加ID来使用无Cookie会话,我不确定您是否可以这样做,除非您可以强制用户返回同一URL。或者您可以在cookie中存储加密令牌。为什么不安全?如果你安全而聪明地使用cookies,那绝对是安全的。@hey:这不安全:我在你的计算机上,我去cookies目录,我读了你的登录信息,我99%肯定你在其他一些网站上使用这些信息。如果它是一台公共计算机,那就更有趣了@伊格纳西奥:事实上,你可以创建自己的会话系统。如果你可以物理访问我的机器,Cookies将是我最不担心的。如果你可以访问我的电脑,那么更糟糕的是,进入chrome设置,打开密码面板,所有的密码会话都可以使用Cookies,当浏览器关闭时,Cookies会被删除,除非他们有一个特定的生命周期。cookie并不是会话生存期的唯一原因。2.我说的是术语“会话”,而不是特定的PHP机制。但是PHP会话思想当然遵循这个定义。你可以忽略这种行为,但这只会破坏你自己。如果浏览器会话过期,cookie就称为会话cookie。浏览器关闭时就是这种情况。但是这样的会话cookie不需要包含会话ID。cookie不应该对会话生存期负责;维护会话的是服务器,而不是客户端。令人惊讶的是,拥有如此高声誉的用户对当前会话实现如此不熟悉。我的意思是使用setcookie而不是使用url参数(或http请求中的任何位置)的会话启动,但这不是默认的行为,我认为这里我们看到的是一个正常的情况。但你确实是对的
$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