我有一个位于 ?action=panel 的登录表单,它显示了“有趣”的行为:
我使用一个名为 performLogin 的函数来检查 DB,为了便于阅读,我省略了大部分代码。
function performLogin()
{
// check for valid login and such
if ( valid ) // fake metacode
{
$_SESSION['user_id'] = $user_id;
header("Location: ?action=panel" );
exit();
}
}
如果我直接调用此函数,它将检查、更新会话并通过工作会话进行重定向。
现在有时我必须将用户从旧格式转换为适用于:
function convert()
{
// do some DB stuff
if ( converted ) // fake metacode
{
performLogin();
}
}
这是东西破裂的时候。我可以在重定向之前插入一个断点,并且 _SESSION 将保持原样,在允许重定向之后它将消失。请记住,直接调用 performLogin 总是有效的。
在 index.php 中执行的第一件事之一:
session_name("project_session");
session_start();
但它变得更好:
将重定向更改为不同于“?action=panel”的任何内容(前面有或没有域)都可以正常工作。此外,如果我将重定向注释掉并手动转到?action=panel,它可以工作。
到目前为止我尝试过的事情:
-在重定向之前使用和不使用域/URL 的重定向:(其中一个或多个)
-睡眠(2);
-session_write_close();
-session_regenerate_id(真);