-3

我正在使用会话来跟踪用户。在另一个页面上,它会在用户登录时设置用户名和密码变量,然后重定向到该页面。

出于安全原因,当用户来到这里时,我想检查用户是否已登录。如果用户未登录,则会将用户重定向到 index.php 页面

<?php 

  session_start();
  if(isset($_SESSION['sessionid'])) {
if (isset ($_SESSION['username' and 'password'])){
}
else
{
    header("Location:Index.php");
}
  }
?>

问题是,如果我只是通过输入相关 URL 来加载页面,我不会被重定向到索引页面

任何帮助表示赞赏

4

4 回答 4

1

我强烈建议不要在会话中存储该信息。话虽如此,您的语法有错误:

if (isset ($_SESSION['username']) && isset ($_SESSION['password'])) {...}

但是,如果我可以进一步添加,我会建议(至少)创建一个类或函数来为您执行此操作,因为您将不止一次使用它。

为自己创建一个函数,例如:

function is_logged_in () {
  if ((isset ($_SESSION['username'])) && (isset ($_SESSION['password']))) {
    /* this is an awful way of checking if a user is logged in! */
    return true;
  } else {
    return false;
  }
}

然后,当您需要检查用户是否登录时,只需引用该函数:

if (is_logged_in ()) {
  /* show members only stuff */
} else {
  echo 'Please login';
}

然后,随着您了解更多并继续使用您的应用程序,您可以调整一个功能,而不必返回并在代码中的任何位置更新登录检查。

但是:请,请,请阅读用户安全,或者更好地使用许多预制包中的一个。

干杯。

于 2013-05-12T17:38:52.073 回答
1

这是检查 if 语句使用 this 的错误方法

if (isset($_SESSION['username'])  && isset($_SESSION[ 'password']))
于 2013-05-12T17:28:08.517 回答
1

isset ($_SESSION['username' and 'password'])您不检查两个变量是否存在,而是检查带有键的$_SESSION['username']变量(其计算结果为)是否存在,所以基本上.$_SESSION['password']$_SESSION'username' and 'password'trueisset($_SESSION[true])

您实际上需要列出这两个变量:

isset($_SESSION['username'], $_SESSION['password'])
于 2013-05-12T17:41:34.277 回答
0

您的if情况有一个 sintax 错误,您需要单独声明您的会话值,因此更改为

if((isset($_SESSION['username'])) && (isset($_SESSION['password']))) {
于 2013-05-12T17:32:29.067 回答