【问题标题】:How to maintain two PHPSESSID cookie one for https and other for http in same browser如何在同一浏览器中维护两个 PHPSESSID cookie 一个用于 https,另一个用于 http
【发布时间】:2018-09-17 12:23:19
【问题描述】:

我有一个 Web 应用程序,它使用标志 HttpOnly、路径和安全设置会话 cookie PHPSESSID。仅在访问 https url 时设置安全。

如果 cookie 是由 http 请求设置的,则同样会被 https 共享,反之亦然。如何在具有相同 cookie 名称 PHPSESSID 的同一浏览器中维护两个不同的会话,一个用于 http,另一个用于 https。

【问题讨论】:

  • 这听起来不像是你将来会喜欢的想法。
  • 我同意@JaredFarrish,这通常是一个问题,它告诉您您做错了什么。通常,您会将所有非 https 请求转发到 https 并安全地执行所有操作。如果您出于某种原因不这样做,请查看php.net/manual/en/… 或找出一种在转换时查找会话想法的方法,请参阅php.net/manual/en/function.session-name.php
  • 不仅是http deprecated in the browser,还要考虑影响支持;这产生了两个可能难以辨别的范围。使整个网站成为 https,使用 Let's Encrypt 基本上是免费的。您可以详细描述一下这具体为您解决了什么问题,以便确定解决方案的适当性。
  • 我要同意这里的其他人的观点:既然你已经有了 https,那么你根本不应该考虑使用不安全的 http。切换到 100% https。

标签: php


【解决方案1】:

无法为主机设置 2 个具有相同名称的 cookie。 Cookie 与主机或域相关联,不考虑协议。

如果您真的想拥有单独的会话存储,则需要通过session_name 手动将至少一个会话设置为具有不同的名称。

至于 HttpOnly 标志,它是浏览器的信号量,并且没有与之关联的活动服务器端行为。换句话说,该标志可能会或可能不会被服务器尊重。

这个区域中一个更有意义的设置是 session.cookie_secure,服务器根本不会通过 http 发送 cookie,但是,这不应该被解释为意味着它不会读取 cookie。如果在浏览器中设置了 cookie,并且浏览器向该主机或域发出后续请求(如果使用域 cookie),则浏览器将在请求中包含 cookie 数据。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2015-06-01
    • 2019-09-08
    • 2012-12-22
    • 2023-01-24
    • 1970-01-01
    • 2010-10-26
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多