PHP Session没有转移到受保护的页面

时间:2014-07-01 21:42:29

标签: php session

我一直在努力为我的网络应用程序实现登录系统。

我的基本逻辑工作就我的index.php而言 - 如果用户尝试在那里导航并且没有登录,则将它们重定向到登录屏幕。一旦他们提供了正确的凭据,他们就会被正确地引导回受保护的index.php页面。

这里的代码逻辑如下:

(适用的index.php

    <?php
    session_start();
    include_once 'db_functions.php';
    require_once 'access.php';

    if (!userIsLoggedIn()) {
        include 'login.php';
        exit();
    }

当用户尝试导航到另一个受保护的页面时,会出现此问题。我的逻辑是受保护的页面检查用户是否已登录,如果没有将它们发送回索引,索引又将它们发送到登录屏幕。

(适用protectedpage.php)

   <?php
    session_start();
    require_once 'access.php';
    echo "Logged in: " + $_SESSION['loggedIn'];
    echo "User: " + $_SESSION['email'];
    echo "Password: " + $_SESSION['password'];
    // receive data from HTML readcalllog request

    $rName=$_POST["registration"]; //irrelevant post data
    $rowId=$_POST["rowid"]; //irrelevant post data

    if ($_SESSION['loggedIn'] == FALSE) {
        header('Location: http://www.myapp.com/index.php'); //if not logged in, return to index.php, which in turn redirects to a logon page. 
        exit();
    }

正如您所看到的,我包含了测试回显语句以打印出当前会话的详细信息。当我导航到该页面(关闭重定向功能)以检查错误消息时,它将打印"000",而前面没有"Logged in: ""User: "文本。

我执行了测试并在index.php页面上成功打印出详细信息,因此出于某种原因,当我从index.php导航到另一个受保护页面时会话丢失。

非常感谢任何帮助!

修改 以下是access.php函数中userIsLoggedIn()的一部分,用于设置会话变量:

function userIsLoggedIn()
{
    if (databaseContainsAuthor($_POST['email'], $password))
    {
      session_start();
      $_SESSION['loggedIn'] = TRUE;
      $_SESSION['email'] = $_POST['email'];
      $_SESSION['password'] = $password;
      return TRUE;
    }
    else
    {
      session_start();
      unset($_SESSION['loggedIn']);
      unset($_SESSION['email']);
      unset($_SESSION['password']);
      $GLOBALS['loginError'] =
          'The specified email address or password was incorrect.';
      return FALSE;
    }
  }
}

编辑2: 如果我登录索引页面,请转到受保护页面(将我发送到登录屏幕)并再次登录,会话功能正常,所有受保护页面都可访问。 我只需要弄清楚是什么阻止了初始登录创建一个结束的正确会话。

1 个答案:

答案 0 :(得分:0)

首先,您不需要在页面中包含session_start();多一次。只需将其插入每个文件的开头即可。

如果我是你,我会使用此声明来查看用户是否已登录受保护的页面:

    if ( !isset($_SESSION['email'] && !isset($_SESSION['password'] ) ) {
        header('Location: http://www.myapp.com/index.php'); //if not logged in, return to index.php, which in turn redirects to a logon page. 
        exit();
    } else {
        echo "Logged in";
    }

此外,我建议您同时使用$_SESSION$_COOKIES来创建更强大的登录系统。