我有一个位于?action = panel的登录表单,显示了一个“有趣”的行为:
我使用一个名为performLogin的函数来检查数据库,为了便于阅读,我遗漏了大部分代码。
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,它就可以工作。
到目前为止我尝试过的事情:
带有和不带域名/网址的-redirect 在重定向之前:(其中一个或多个)
-sleep(2);
-session_write_close();
-session_regenerate_id(真);