需要哪些php.ini设置才能使会话保持活动状态大约两天



http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-寿命

表示session.cookie_lifetime为0"一直持续到浏览器关闭"。这是会话可以具有的绝对最大长度吗(总是在浏览器关闭时擦除(,还是将session.cookie_lifetime设置为23243245234会产生一个可能在浏览器关闭后持续的结果?

更重要的是,我需要设置哪些php.ini设置才能使会话持续两天,是否有安全理由建议某个(我希望更低(时间限制,如果有,建议的时间段是多少?

预期行为编辑:这是我想要实现的,也许我可以通过获得一些设置建议来理解行为,而不是php.ini设置的特定值:

我希望会议尽可能长,最多(大约(两天。如果会话可以持续到浏览器关闭之后,我希望它能这样做(大约两天(。

我应该为php.ini设置什么(是的,我可以直接编辑php.ini(来实现这一点?

关于会话,您需要担心两个参数。第一个是cookie的TTL,另一个是会话数据文件在被垃圾收集之前的使用年限。

session.cookie_lifetime以秒为单位确定发送到浏览器的cookie将持续多久。它默认为0,这意味着直到浏览器关闭。两天需要172800秒。

session.gc_maxlifetime也以秒为单位确定在服务器上标记的会话数据被视为垃圾并可以删除之前的时间。

设置这两个ini指令应该可以为您提供持续两天的会话,但需要注意的一点除外。

一些操作系统在其默认临时目录上进行自动垃圾收集。如果PHP被配置为在那里存储会话数据,那么如果临时目录的GC周期很短,你可能会发现自己在达到session.GC_maxlifetime中的值之前就丢失了会话。为了避免这种情况,请确保PHP将会话数据存储到/tmp或主机操作系统的临时目录以外的位置。

这意味着浏览器关闭时会话丢失。

也就是说,包含该会话id的cookie与浏览器的onclose事件一起被删除。

session.cookie_lifetime指定cookie的生存期(秒(发送到浏览器

建议的时间段基本上取决于你的会话需要举行什么。如果你想让你的用户登录网站(提醒我(,你应该去最大的期限。举个例子。

如果你想让会话存活大约两天,你只需要计算

60[秒]*60[分钟]*48[小时]=172800秒

首先,我不建议任何人玩会话生活,除非他们意识到后果。

关于您的问题,实际上有两个系统可以用来管理会话。

首先,如果您使用的是PHP的默认系统,那么您将使用一个基于文件的会话系统,其中通过在您的服务器上创建一个文件来保存客户端会话的实际数据,该文件通常与会话id命名相同。然后,用户将一个cookie发送到浏览器,该浏览器保存会话id客户端

您所指的设置ONLY定义cookie在客户端浏览器中的使用寿命,而不是会话的使用寿命。

设置为0:使cookie持续到浏览器关闭。

高于0的设置:导致会话持续那么多秒,并且仅在该时间之后终止。浏览器可以根据用户的意愿多次打开和关闭,cookie将一直保留到到期。

我认为,设置只是创建cookie后的秒数,而不是实际的时间戳,但这可能是错误的,但我可能错了。

您可以在php.ini中更改此设置,也可以使用session_get_cookie_params和session_set_cookie_params 的组合

澄清

正在忽略服务器端。客户端拥有一个cookie,其中包含SessionID,并允许他们访问该会话。如果cookie丢失,则客户端不再能够访问会话,并且本质上是丢失。

值为0将导致客户端浏览器保留cookie,直到浏览器关闭。如果用户将浏览器打开一周,cookie将保留一周。

大于0的值将导致客户端浏览器将cookie保留该秒数。例如,如果该值设置为172800秒(2天(,则cookie将由浏览器保存2天。如果浏览器在这两天内关闭,cookie不会被销毁,只会在两天后丢失。

为什么使用0

使用0更安全,因为当用户在公共系统上使用完您的网站并关闭浏览器时,cookie将丢失,并且无法再访问会话,从而阻止其他用户打开浏览器并继续会话。假设用户将手动结束会话(例如注销(是不可靠的,因为许多用户没有。

等等,有混乱。。。。。

如果浏览器关闭,"会话"不会丢失。。。。它是"Cookie",在关闭浏览器时会丢失。

"会话"与"Cookie"完全不同。会话保留在服务器上,可以显式销毁。而"Cookies"位于客户端,可以手动销毁,也可以在特定时间间隔或关闭浏览器时销毁。

短(但略不准确(解决方案

session.gc_maxlifetime设置为172800,将session.cokie_lifetime设置为0


扩展且更准确的解决方案

通常,session.gc_maxlifetime是控制会话生存时间的配置。因此,将该指令设置为172800将使会话在172800秒后过期(理论上(。但是,由于会话期限的计算有点奇怪,您可能需要实现一个更准确的过期方案。请参阅我对如何在30分钟后使PHP会话过期的回答了解更多信息。

将会话ID的cookie生存期设置为0,cookie将一直有效,直到浏览器关闭。

最新更新