【问题标题】:Sessions or cookies across multiplet tabs in PHPPHP 中跨多个选项卡的会话或 cookie
【发布时间】:2011-06-14 20:01:06
【问题描述】:

是否可以设置将存在于所有选项卡中的会话变量或 cookie?

我认为 firefox 会在所有现有选项卡中保持会话,但是我测试并发现只有最初设置会话的当前选项卡才是可用的会话。

谢谢!

编辑:

标签 1:

setcookie("testcookie", "something", time()+(60*60*24*365));

标签 2:

print_r($_COOKIE['testcookie']);

Tab 2 只打印一个空数组。如果我把它移到标签 1,它会打印出 cookie。

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    Cookie 始终发送到服务器,前提是:

    • 域匹配(包括子域)。
    • 路径匹配(cookies 可以分配到特定的路径 -- 将它们分配给 root 意味着整个域)。
    • 端口匹配。
    • 如果您将 cookie 设置为安全,则协议 (http/https) 匹配。

    只要所有这些事情都是真实的,您就应该在所有选项卡上都有基于 cookie / cookie 的会话。您需要刷新标签才能看到 cookie 的任何效果(包括在 Firefox 扩展的 Javascript 中看到它)。

    如果所有这些都是正确的,并且您仍然没有在所有选项卡上看到您的 cookie,那么您需要进行大量调试...这不是标准行为。

    【讨论】:

    • 这是我的想法,但是我在一个选项卡上设置了 cookie,而在另一个选项卡上它不可用 - 请参阅编辑
    • 但是,如果您在设置 cookie 的同一选项卡中刷新页面,那么 print_r 是否有效?您是否安装了隐身模式或某些隐私扩展程序?如果可以的话,您可能想在另一台安装了全新 Firefox 的计算机上尝试...只是为了排除这些可能性。
    • 好的,我已经开始工作了。我正在使用 CodeIgniter 框架,如果我使用 Cookie Helper,它可以工作,但是我必须指定 'domain' 参数,否则它将无法跨标签工作。
    【解决方案2】:

    当我使用您在编辑中显示的代码进行测试时,我完全没有问题...

    您可以尝试以下几件事:

    • 从 firefox 中清除所有 cookie 并再次运行(如果您之前设置过 cookie 但使用其他设置,浏览器有时会感到困惑...
    • 尝试使用其他浏览器或其他计算机。
    • 将 cookie 的路径设置为“/”,并可选择将域设置为 .youdomain.com,例如 setcookie("testcookie", "something", time()+(60*60*24*365), "/", ".yourdomain.com");

    如果你仍然不能让它工作,我最好的办法是清理服务器,可能是重新安装 PHP 和 Apache。

    【讨论】:

      【解决方案3】:

      要拥有通用存储,请使用 cookie。

      Cookie 是客户端 会话是服务器端

      【讨论】:

      • 嗯,两者实际上都是客户端。
      • 其他选项卡也无法使用 cookie。
      猜你喜欢
      • 2020-10-12
      • 2016-04-20
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多