【问题标题】:How to save PHP session after browse closing? (without separate cookies)浏览器关闭后如何保存PHP会话? (没有单独的 cookie)
【发布时间】:2021-02-03 03:38:03
【问题描述】:

有很多 Stack Overflow 问题建议使用单独的 cookie 来保存会话参数,但我不想在客户端存储任何额外的 cookie。

目前,每次浏览器重新启动后,我都有一个带有空会话参数的新会话。

有什么方法可以在每次浏览器重启后保持 PHP 会话处于活动状态?

该站点非常简单,没有数据库。我将所有数据存储在 $_SESSION 中。

【问题讨论】:

    标签: php session cookies session-cookies session-variables


    【解决方案1】:

    我猜,你使用 session_start 函数来开始一个新的会话。如果我是正确的,那么 PHPSESSID cookie 的默认生命周期等于 0。零生命周期意味着 cookie 是会话 cookie。

    当前会话结束时会删除会话 cookie。浏览器定义了“当前会话”何时结束,几乎所有浏览都在浏览关闭时结束会话。

    您可以尝试使用 session_set_cookie_params 函数设置会话 cookie 的生命周期。第一个输入参数是 $lifetime,它定义了会话 cookie 的生命周期,以秒为单位。

    尝试在 session_start 之前执行 session_set_cookie_params(86400) 并检查我的答案是否适合你。

    【讨论】:

    • 太棒了。有用!我想知道为什么在其他问题中没有人编写这种方法?
    【解决方案2】:

    PHP 会话有一个“cookie 生命周期”参数,可以使用 the session.cookie_lifetime ini settingthe session_set_cookie_params function 设置:

    以秒为单位指定发送到浏览器的 cookie 的生命周期。值 0 表示“直到浏览器关闭”。默认为 0。

    因此,默认情况下,浏览器将被告知仅在关闭 cookie 之前保留 cookie,但将此设置为非零值将指示浏览器在未来的特定时间删除 cookie。

    例如,生命周期 86400 表示“在启动会话时,计算未来 24 小时(86400 秒)的日期,并将其设置为发送到浏览器的 cookie 的到期日期”。

    重要提示:

    • 要产生任何效果,需要在调用session_start之前设置此设置,因为此时 PHP 将生成 Set-Cookie 标头以发送到浏览器。
    • 有一个单独的session.gc_maxlifetime setting 确定何时删除服务器上的数据。该值应设置为至少与 cookie 生命周期一样长的值,否则返回的用户可能有一个会话 ID cookie,但服务器上没有会话数据。

    【讨论】:

    • 谢谢。我想知道为什么在其他问题中没有人写这种方法?会不会有什么意想不到的问题?
    • @Anton_John 这取决于你在谈论什么其他问题,你实际上并没有链接到任何问题。
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2015-08-12
    • 2021-12-10
    相关资源
    最近更新 更多