如何在浏览器关闭后保存 PHP 会话? (没有单独的 cookie)
How to save PHP session after browse closing? (without separate cookies)
有很多 Stack Overflow 问题建议使用单独的 cookie 来保存会话参数,但我不想在客户端存储任何额外的 cookie。
目前,每次浏览器重新启动后,我都有一个会话参数为空的新会话。
有什么方法可以在每次浏览器重新启动后保持 PHP 会话处于活动状态?
站点非常简单,没有数据库。我将所有数据存储在 $_SESSION 中。
我猜,您使用 session_start 函数开始新会话。如果我是正确的,那么 PHPSESSID cookie 的默认生命周期等于 0。零生命周期意味着 cookie 是会话 cookie。
会话 cookie 在当前会话结束时被删除。浏览器定义“当前会话”何时结束,几乎所有浏览器都在浏览器关闭时结束会话。
您可以尝试使用 session_set_cookie_params 函数设置会话 cookie 的生命周期。第一个输入参数是 $lifetime 定义会话 cookie 的生命周期,以秒为单位定义。
尝试在session_start之前执行session_set_cookie_params(86400),看看我的答案是否适合你。
PHP session 有一个“cookie lifetime”参数,可以用 the session.cookie_lifetime
ini setting or the session_set_cookie_params
function:
设置
Specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the browser is closed." Defaults to 0.
因此,默认情况下,浏览器将被告知仅在关闭之前保留 cookie,但将其设置为零以外的任何值将指示浏览器在未来的特定时间删除 cookie。
例如,生命周期 86400 表示“在启动 session 时,计算未来 24 小时(86400 秒)后的日期,并将其设置为发送到浏览器的 cookie 的到期日期".
重要提示:
- 要产生任何效果,需要在调用
session_start
之前设置此设置 ,因为届时 PHP 将生成 Set-Cookie
header 发送到浏览器。
- 有一个单独的
session.gc_maxlifetime
setting决定何时删除服务器上的数据。这应该设置为至少与 cookie 生命周期一样长的值,否则返回的用户可能有一个 session ID cookie,但服务器上没有 session 数据。
有很多 Stack Overflow 问题建议使用单独的 cookie 来保存会话参数,但我不想在客户端存储任何额外的 cookie。
目前,每次浏览器重新启动后,我都有一个会话参数为空的新会话。
有什么方法可以在每次浏览器重新启动后保持 PHP 会话处于活动状态?
站点非常简单,没有数据库。我将所有数据存储在 $_SESSION 中。
我猜,您使用 session_start 函数开始新会话。如果我是正确的,那么 PHPSESSID cookie 的默认生命周期等于 0。零生命周期意味着 cookie 是会话 cookie。
会话 cookie 在当前会话结束时被删除。浏览器定义“当前会话”何时结束,几乎所有浏览器都在浏览器关闭时结束会话。
您可以尝试使用 session_set_cookie_params 函数设置会话 cookie 的生命周期。第一个输入参数是 $lifetime 定义会话 cookie 的生命周期,以秒为单位定义。
尝试在session_start之前执行session_set_cookie_params(86400),看看我的答案是否适合你。
PHP session 有一个“cookie lifetime”参数,可以用 the session.cookie_lifetime
ini setting or the session_set_cookie_params
function:
Specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the browser is closed." Defaults to 0.
因此,默认情况下,浏览器将被告知仅在关闭之前保留 cookie,但将其设置为零以外的任何值将指示浏览器在未来的特定时间删除 cookie。
例如,生命周期 86400 表示“在启动 session 时,计算未来 24 小时(86400 秒)后的日期,并将其设置为发送到浏览器的 cookie 的到期日期".
重要提示:
- 要产生任何效果,需要在调用
session_start
之前设置此设置 ,因为届时 PHP 将生成Set-Cookie
header 发送到浏览器。 - 有一个单独的
session.gc_maxlifetime
setting决定何时删除服务器上的数据。这应该设置为至少与 cookie 生命周期一样长的值,否则返回的用户可能有一个 session ID cookie,但服务器上没有 session 数据。