【问题标题】:user authentication using sessions causes redirect loop使用会话的用户身份验证导致重定向循环
【发布时间】:2014-12-03 08:40:55
【问题描述】:

我正在尝试制作一个身份验证脚本,将已登录/未登录的用户重定向到正确的页面,但它会导致重定向循环。我有两个页面 index.php 具有登录表单和 mobile.php 具有有效用户的内容。对于身份验证,我在 index.php 的第一行有此代码

session_start();
if (isset($_SESSION["username"]) && isset($_SESSION["userid"])) {
    header("location: mobile.php");
    exit();
}

mobile.php 的第一行是

session_start();
if(!isset($_SESSION["username"])){ 
    header("location: index.php"); 
}

但我不知道它为什么会导致重定向循环。 这是一些屏幕截图。 谢谢你的时间。

以下是 index.php 中的一些代码,这些代码行后面是登录表单。在验证函数中,我所做的只是检查用户名和密码是否有效,如果是,则重新生成会话 ID,并设置会话变量用户名和用户 ID。并返回 true。

if(isset($username) && isset($password)){
    $username = preg_replace('/[^a-zA-Z0-9]/', '', $username);  
    $password = preg_replace('/[^a-zA-Z0-9]/', '', $password);
    $returnmsg = validate($username,$password);
    if($returnmsg===true){
        // header("location: mobile.php");
        exit;
    } else {
        $returnmsg = 'Invalid username or password.';
    }           
}

【问题讨论】:

  • 在 index.php 中重定向后添加exit();。同时在 index.php 中转储 session 变量而不进行重定向
  • 对我来说很好用!它必须在其他代码行中
  • 在清除所有 cookie 并重新启动浏览器后,我使用了 var_dump($_SESSION);在 session_start() 之后;结果是空数组。所以索引页面不应该重定向并继续,但它确实重定向,为什么?
  • @rkrara 你必须向我们展示更多代码!
  • 你在 index.php 中还有其他地方使用过 header() 吗?或者包含一个使用 header() 的页面?从症状看来,您可能不小心将代码块(来自 mobile.php)放入 index.php 或以某种方式被执行。你可以在 mobile.php 中的 header() 之前放置一个回显吗?

标签: php


【解决方案1】:

总是在位置标头后退出。

session_start();
if(!isset($_SESSION["username"])){ 
   header("location: index.php"); 
   exit();
}

【讨论】:

  • 它有什么区别吗,据我所知,一旦涉及到标题,它就会重定向。谢谢。
  • 但是仍然可以尝试输出一些东西。所以退出只是为了确保你的程序做你期望它做的事情。
猜你喜欢
  • 2016-03-05
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多