0

我有一个位于 ?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(真);

4

0 回答 0