会话不按预期方式工作

时间:2013-05-12 17:26:51

标签: php

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

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

<?php 

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

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

感谢任何帮助

4 个答案:

答案 0 :(得分:1)

这是检查if语句使用此

的错误方法
if (isset($_SESSION['username'])  && isset($_SESSION[ 'password']))

答案 1 :(得分: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';
}

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

但请:请读一读用户安全性,或者更好地使用许多预先制作的包中的一种。

干杯。

答案 2 :(得分:1)

使用isset ($_SESSION['username' and 'password']),您不会检查两个变量$_SESSION['username']$_SESSION['password']是否存在,而是$_SESSION变量是否带有键'username' and 'password'(评估为true)存在,基本上isset($_SESSION[true])

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

isset($_SESSION['username'], $_SESSION['password'])

答案 3 :(得分:0)

您的if条件中存在语法错误,您需要单独声明会话值以更改为

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