PHP子域会话消失了

时间:2010-11-29 05:54:28

标签: php session subdomain

的index.php

session_start();

if(!isset($_GET['n'])) {
  $_SESSION['foo'] = "bar";
  header("Location: /index.php?n=D");
}

echo "FOO: ".$_SESSION['foo'];

此页面index.php用于子域。子域是根域中的文件夹,即

 - WWW
    - SUB DOMAIN
      - index.php

会话变量foo在页面调用时设置,然后在重定向标题后检查 - 它已经消失。

我试过了:

  • ini_set('session.cookie_domain','.example.com');
  • session_set_cookie_params()
  • 的各种组合
  • 位置: http://subdomain.example.com
  • 撕掉我的头发

但似乎没有任何效果。看起来像一个非常简单的问题 - 有人可以帮我找到丢失的cookie /会话/变量吗?

修改

var_dump(session_get_cookie_params())收益

array(5) { ["lifetime"]=> int(0) ["path"]=> string(11) "/" ["domain"]=>
 string(23) ".example.com" ["secure"]=> bool(false) ["httponly"]=> bool(false) } 

我的网址中有一个短划线-(my-example.com)。这可能是问题吗?

还尝试在params之前设置session_name()。仍然没有工作。

1 个答案:

答案 0 :(得分:2)

经过五个小时的尝试,我终于联系了我的托管服务提供商,他们看了一下。

判决结果? session.save_path中的php.ini尚未设置。上面的脚本现在正常运行。

如果有人愿意详细说明其中的原因和方法,我会很乐意给他们解决方案,否则我将不得不接受我自己的解决方案。