【问题标题】:PHP session id's differPHP会话ID不同
【发布时间】:2009-09-03 06:05:45
【问题描述】:

我使用的是 php 5.2.8

我有 index.html,它从 IFRAME 加载 LOAD.PHP。

iframe src="load.php".....

我打印出了 load.php 的会话 ID。

然后我运行另一个 test.php,并打印出它的会话 ID。

php 会话 ID 不同。

因此,我不能传递任何会话变量......

这里发生了什么?这个问题以前没有发生过,今天突然开始发生了......但是这个问题仍然存在......它让我发疯!

session.saved_pa​​th 是一样的.../var/php5, cookie 路径是一样的...

【问题讨论】:

  • 你在使用任何框架吗?

标签: php session


【解决方案1】:

如果 PHP 在页面的第二次加载时创建了第二个会话 ID,那么这意味着第一个会话 ID 没有正确传回。可能由于某种原因未设置 cookie。检查事项:

  • 在多个浏览器中测试?
  • 您是否以某种方式禁用了浏览器中的 cookie?
  • iframe 是否位于可能阻止 cookie 传递的不同域或子域中?
  • 安装 LiveHTTPHeaders 或其他一些 Firefox 插件以检查您收到的 cookie

【讨论】:

    【解决方案2】:

    http://www.example.com 的 sessionID 与 http://example.com 不同

    【讨论】:

    • 有点惊讶为什么我的网络应用程序之前抱怨过这个......无论如何,这成功了,iframe 正在加载没有 www 的东西。
    • 这是对的,但这不是问题的根源。
    【解决方案3】:

    (不是真正的答案,因为在我看来,您的问题没有足够的数据来提供某个答案,而是需要检查一些事情)

    文件在同一个域和目录中并且cookie不限于不同的目录(即path=/)? (注意:除非您使用session_set_cookie_params 明确说明,否则它们不受限制)

    浏览器是否在发送 cookie(或者您可能处于“隐身模式”)?如果 cookie 不起作用,PHP 可能会尝试在 QueryString 中传递会话 ID 并失败,如果你去 test.php 手动写入它的名称而不跟随链接(通常我使用 session.use_only_cookies=1 来避免这种情况)。

    【讨论】:

      【解决方案4】:

      如果它们有不同的 cookie 域或 cookie 根本不起作用并且 PHP 配置为仅使用 cookie 作为会话 ID (session.use_only_cookies=1),它们将具有不同的 SID。

      Cookies域解释here

      只有指定域中的主机才能为域设置 cookie,并且域中必须至少有两 (2) 或三 (3) 个句点,以防止以下形式的域:". com”、“.edu”和“va.us”。在下面列出的七个特殊顶级域之一中失败的任何域只需要两个句点。任何其他域至少需要三个。七个特殊的顶级域是:“COM”、“EDU”、“NET”、“ORG”、“GOV”、“MIL”和“INT”。

      domain 的默认值是生成 cookie 响应的服务器的主机名。

      因此,为您的主机设置一个公共域,它们将共享 cookie,因此 PHP SID :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多