【问题标题】:PHP session cannot be restarted sometimesPHP会话有时无法重新启动
【发布时间】:2015-08-30 03:30:22
【问题描述】:

我有一个 PHP 脚本,可以将收据返回给在我的网站上购买的客户。当他们收到收据时,我希望能够开始新的会话。到目前为止,我在返回收据页面的脚本末尾有一段代码。它是:

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(),
    '',
    time() - 42000,
    $params["path"],
    $params["domain"],
    $params["secure"],
    $params["httponly"]
    );
}

session_destroy();
session_regenerate_id(true);

当我使用网站并完成购买过程时,在提供收据页面后,会话 ID 保持不变。

然而,我把上面的代码放在一个名为“regenerate.php”的单独脚本中。然后我在另一个脚本中调用它,如下所示:

<?php
    include("regenerate.php");
    session_start();
    echo("<br>id:".session_id());

    include("regenerate.php");
    session_start();
    echo("<br>id:".session_id());

    include("regenerate.php");
    session_start();
    echo("<br>id:".session_id());

    include("regenerate.php");
    session_start();
    echo("<br>id:".session_id());
?>

当我运行此脚本时,每次运行重新生成脚本时会话 ID 都会更改。但是,相同的代码在我试图在重新启动会话之前提供的预期页面中不起作用。

有什么理由它可能在一种情况下起作用而在另一种情况下不起作用?我认为这可能是因为文本已经被写入输出,但是在这两种情况下都会发生。

【问题讨论】:

    标签: php session-state


    【解决方案1】:

    在向浏览器发送输出后,您无法在同一请求期间生成新会话。

    仅仅是因为会话 cookie 已经发送 - 带有标头。因此,您对session_start() 的第二次调用很可能会出错。

    您可以在此处找到有关打开 display_errors 的更多信息:How do I get PHP Errors to display?

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 2019-01-02
      • 1970-01-01
      • 2014-03-23
      • 2023-03-10
      • 2021-10-10
      • 2010-11-27
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多