【发布时间】: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