代码之家  ›  专栏  ›  技术社区  ›  Ben

PHP子域会话消失

  •  0
  • Ben  · 技术社区  · 14 年前

    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/session/variable吗?

    编辑

    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) } 
    

    我的网址有破折号 - 在里面(我的示例.com)。这可能是问题所在吗?

    也试过设置 session_name() 在params之前。仍然不起作用。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Ben    14 年前

    经过五个小时的努力,我终于联系了我的主机供应商,他们看了一眼。

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

    如果有人想详细说明原因、方式和其他什么,我很乐意给他们解决办法,否则我就不得不接受我自己的办法。