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

php会话在头之后被破坏/丢失

  •  15
  • Ben Everard  · 技术社区  · 15 年前

    我有一个脚本在重定向到之前设置了一些会话值 / 使用 header() .

    我读过很多关于 $_SESSION 变量在之后被销毁/丢失 标题() ,即使在我实现了这一点之后:

    // set session here
    
    session_regenerate_id(true);
    session_write_close();
    header("Location: /");
    

    session_start() 放在正确的地方,有人知道我可能丢失什么吗?

    在index.php页面上,我看到了:

    session_start();
    print_r($_SESSION);
    
    // outputs nothing :'(
    

    代码非常复杂,所以不会全部发布,只发布代码片段。

    6 回复  |  直到 9 年前
        1
  •  11
  •   John Parker    15 年前

    由于使用位置标题,我从未见过任何与会话相关的问题-您确定要呼叫 session_start 在两页?


    隐马尔可夫模型。。。在添加上述会话开始位之前,这个答案更有意义,并且提到了您确定使用会话开始的事实。-)

        2
  •  5
  •   jackJoe Fazileh    12 年前

    必须在会话关闭前发送头

    session_regenerate_id(true);
    
    header("Location: /");
    // the header must be sent before session close
    session_write_close(); // here you could also use exit();
    
        3
  •  4
  •   junaid    14 年前

    刚放出口;在标题之后:我用这个解决了吗?

        4
  •  4
  •   Tiago Sippert mdahlman    11 年前

    在头重定向之后,您需要退出PHP脚本:

    header("Location: /");
    exit();
    
        5
  •  3
  •   Ben Everard    14 年前

    为了解决这个问题,我们得出结论,这是服务器配置的问题,考虑到主机以这种方式闻名,这并不奇怪。

        6
  •  -4
  •   arc_shiva    9 年前

    您不需要在每个页面中启动session_start()。cuz在关闭浏览器之前,php.ini中指定的整个路径的会话将保持不变。