PHP$\u会话变量意外运行

PHP$\u会话变量意外运行,php,session,login,session-variables,Php,Session,Login,Session Variables,我正在为一个网站创建一个非常基本的用户登录界面,我正在为该网站的一个成员部分工作。我使用for$\u会话变量来存储信息。['access']存储有关用户是否允许访问的布尔值,['invalid']如果用户名/密码与错误处理不匹配,则为true,['no_Attement']如果用户尝试在未登录的情况下访问受限制的页面,则为true,['uri']存储他们在未登录的情况下尝试访问的页面的uri 到目前为止,按照我对页面的编码方式,一切都正常,除了当['no_trunt']为真时,错误消息永远不会显

我正在为一个网站创建一个非常基本的用户登录界面,我正在为该网站的一个成员部分工作。我使用for$\u会话变量来存储信息。['access']存储有关用户是否允许访问的布尔值,['invalid']如果用户名/密码与错误处理不匹配,则为true,['no_Attement']如果用户尝试在未登录的情况下访问受限制的页面,则为true,['uri']存储他们在未登录的情况下尝试访问的页面的uri

到目前为止,按照我对页面的编码方式,一切都正常,除了当['no_trunt']为真时,错误消息永远不会显示。以下是我的网页摘录:

login.php

每个受限页面的开头都以以下代码开头:

site-header.php 此页面在我的网站的每个页面的开头调用。它有标题,导航栏等等。下面只是侧边栏的成员登录部分

if(isset($_SESSION['login']['allow']) && $_SESSION['login']['allow'] == true) {
    echo "<li><a href=\"/members\" id=\"members\">Members</a></li>\n";
}
else {
    echo "<li>\n";
    echo "<div class=\"expandable\">Members <span class=\"show-hide\">+</span></div>\n";
    echo "<div class=\"nav-details\">\n";
    if (isset($_SESSION['login']['invalid']) && $_SESSION['login']['invalid'] == true) {
        echo "<div id=\"login-error\">The username or password you<br />entered was incorrect.</div>\n";                                    
    }
    elseif (isset($_SESSION['login']['no_attempt']) && $_SESSION['login']['no_attempt'] == true) {
        echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
    }
    echo "<form method=\"post\" action=\"/members/login.php\" id=\"login-form\">\n";
    echo "Username:<br />\n";
    echo "<input type=\"text\" name=\"username\" /><br /><br />\n";
    echo "Password:<br />\n";
    echo "<input type=\"password\" name=\"password\" /><br /><br />\n";
    echo "<input type=\"submit\" value=\"Login\" id=\"login-button\" />\n";
    echo "</form>\n";
    echo "</div>\n";
    echo "</li>\n";
}
$_SESSION['login']['invalid'] = false;
$_SESSION['login']['no_attempt'] = false;

把这部分代码分开

   elseif (isset($_SESSION['login']['no_attempt']) && $_SESSION['login']['no_attempt'] == true) {
    echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
}
到下面的

    elseif(isset($_SESSION['login']['no_attempt'])
    {
        if($_SESSION['login']['no_attempt'] === true)
          {
                echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
          }
    }

看看这是否有效。注意我使用了“==”操作符。。。这确保了它是“相同的”

将这部分代码分开

   elseif (isset($_SESSION['login']['no_attempt']) && $_SESSION['login']['no_attempt'] == true) {
    echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
}
到下面的

    elseif(isset($_SESSION['login']['no_attempt'])
    {
        if($_SESSION['login']['no_attempt'] === true)
          {
                echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
          }
    }

看看这是否有效。注意我使用了“==”操作符。。。这保证了它是“相同的”

我终于能够解决我的问题了!错误在于我在每个受限页面顶部包含的代码片段。我改变了:

session_start();
if($_SESSION['login']['allow'] != true) {
    $_SESSION['login']['redirect'] = $_SERVER['REQUEST_URI'];
    $_SESSION['login']['no_attempt'] = true;
    header('Location: /');
}
require ('../assets/includes/site-header.php');
为此:

session_start();
if($_SESSION['login']['allow'] != true) {
    $_SESSION['login']['redirect'] = $_SERVER['REQUEST_URI'];
    $_SESSION['login']['no_attempt'] = true;
    header('Location: /');
}
else {
    require ('../assets/includes/site-header.php');
}
我猜这与我设置$\u SESSION['login']['invalid']=false有关;
$\u会话['login']['no\u trunt']=false;在site-header.php上。我仍然是一个php初学者,但我认为site-header.php上的php代码可能是经过处理的,因为在页面按页眉“Location:/”重定向页面之前是必需的;如果有人知道这就是我的问题被解决的原因,或者是因为其他原因,我很乐意听到

我终于解决了我的问题!错误在于我在每个受限页面顶部包含的代码片段。我改变了:

session_start();
if($_SESSION['login']['allow'] != true) {
    $_SESSION['login']['redirect'] = $_SERVER['REQUEST_URI'];
    $_SESSION['login']['no_attempt'] = true;
    header('Location: /');
}
require ('../assets/includes/site-header.php');
为此:

session_start();
if($_SESSION['login']['allow'] != true) {
    $_SESSION['login']['redirect'] = $_SERVER['REQUEST_URI'];
    $_SESSION['login']['no_attempt'] = true;
    header('Location: /');
}
else {
    require ('../assets/includes/site-header.php');
}
我猜这与我设置$\u SESSION['login']['invalid']=false有关;
$\u会话['login']['no\u trunt']=false;在site-header.php上。我仍然是一个php初学者,但我认为site-header.php上的php代码可能是经过处理的,因为在页面按页眉“Location:/”重定向页面之前是必需的;如果有人知道这就是我的问题被解决的原因,或者是因为其他原因,我很乐意听到

MD5是一个非常不安全的哈希算法,不要使用它。你不需要包含更多的代码,至少现在不需要。但是您需要更改一些代码,请参阅:-对于会话问题,您需要调试它。通过校对数据来验证您的期望:var\u dump$\u会话;是浏览器中的好友视图源。所以这需要你首先进行基本的故障排除。如果不是md5,你会推荐我使用什么?首先,我不太担心这个网站的安全性,至少在这方面@hakre还提到,当删除最后一行时:$\u SESSION['login']['no\u trunt']=false;在index.php上,错误消息会出现,尽管每次我重新加载页面时都会出现,而不仅仅是一次。-对于会话,这取决于,您需要对它有自己的感觉,这与没有会话是不同的,因为通过会话,您开始在请求之间共享部分状态。进行故障排除和调试,剩下的部分将自动完成。不过,你知道是什么导致了问题吗?MD5是一种非常不安全的哈希算法,不要使用它。你不需要包含更多代码,至少现在不需要。但是您需要更改一些代码,请参阅:-对于会话问题,您需要调试它。通过校对数据来验证您的期望:var\u dump$\u会话;是浏览器中的好友视图源。所以这需要你首先进行基本的故障排除。如果不是md5,你会推荐我使用什么?首先,我不太担心这个网站的安全性,至少在这方面@hakre还提到,当删除最后一行时:$\u SESSION['login']['no\u trunt']=false;在index.php上,错误消息会出现,尽管每次我重新加载页面时都会出现,而不仅仅是一次。-对于会话,这取决于,您需要对它有自己的感觉,这与没有会话是不同的,因为通过会话,您开始在请求之间共享部分状态。进行故障排除和调试,剩下的部分是准自动完成的。不过,您知道是什么原因导致了问题吗?