Php 读取时会话值错误

Php 读取时会话值错误,php,session,Php,Session,我有一个奇怪的问题。我想制作一个页面,使用用户名来标识应该显示哪些内容。除了一件事,它似乎工作得很好。在一个特定页面上从会话读取错误的值。我已经在浏览器中检查了会话值,但该值似乎是正确的。我将向您展示代码: 这是我的登录函数,使用php: <?php //CONNECT TO DATABASE $db = mysqli_connect("localhost","root","MyPassword","MyDBName"); if($db->connect_errno){ die('

我有一个奇怪的问题。我想制作一个页面,使用用户名来标识应该显示哪些内容。除了一件事,它似乎工作得很好。在一个特定页面上从会话读取错误的值。我已经在浏览器中检查了会话值,但该值似乎是正确的。我将向您展示代码:

这是我的登录函数,使用php:

<?php

//CONNECT TO DATABASE
$db = mysqli_connect("localhost","root","MyPassword","MyDBName");
if($db->connect_errno){
die('connection error: ' . $db->connect_errno);
}

   //CHECK IF LOGIN DATA IS SUBMITTED AND IS CORRECT
if(isset($_POST['action'])){
switch($_POST['action']){
    case "login":
        $pw = $_POST['pw'];
        $loginUn = $db->real_escape_string($_POST['loginUn']);
        $result = mysqli_query($db,"SELECT `Password` FROM `accounts` WHERE `Username`='" .$loginUn. "'");
        if(mysqli_num_rows($result) != 0){
            $dbpw = $result->fetch_object();
            $VI = explode("-",$dbpw->Password);
            $dbpw = openssl_decrypt($VI[1],"blowfish","",0,$VI[0]);
            if($pw == $dbpw){
                $login = true;
                $_SESSION['login'] = true;
                $_SESSION['Username'] = $_POST['loginUn'];
                $un = $_POST['loginUn'];
            }
        }
        break;
    case "logout":
            $_SESSION['login'] = false;
            $_SESSION['Username'] = "";
        break;
}
}else{
    if(isset($_SESSION['login'])){
        $login = $_SESSION['login'];
        $un = $_SESSION['Username'];
    }
}

?>
然后我使用javascript和php警告变量包含的值:

<script type="text/javascript">
    alert("$un = <?php echo $un;?>");
</script>

警报(“$un=”);

使用login变量似乎没有问题,因为它具有良好的值,但变量$un是错误的。当我没有登录时,它没有值,这是正确的,但当我登录时,它包含值Admin,即使我没有使用Admin登录。在浏览器选项中,cookie值似乎是正确的。我在每一页上都检查了cookie,它工作得很好,只是不在这一页上。我做错了什么,使浏览器(顺便说一句,是firefox)认为登录的总是管理员?

正如前面的评论中提到的,您的脚本中存在许多安全风险

您应该看看PHP来构建您的登录。使用会话时,只有一个cookie存储ID,所有数据将存储在服务器上,用户无法修改


“Admin”保留为cookie值的问题可能是缓存问题。

如前所述,脚本中存在许多安全风险

您应该看看PHP来构建您的登录。使用会话时,只有一个cookie存储ID,所有数据将存储在服务器上,用户无法修改



“Admin”保留为cookie值的问题可能是缓存问题。

我刚刚发现我做错了什么。一段我发现不相关的代码,遗漏了A=,因此没有比较变量,而是将其设置为错误的值。

我刚刚发现我做错了什么。我发现一段不相关的代码缺少了A=,因此没有对变量进行比较,而是将其设置为错误的值。

为什么将其标记为
javascript
?它与JavaScript无关,它与PHP和cookies有关。您的查询可用于sql注入:
“从Username='”的帐户中选择密码“$\u POST['loginUn']”强制性链接重新编码的评论:&你不应该依赖cookie值,任何人都可以在他的浏览器/脚本中设置这些值,并假装是“管理员”。我知道你正在寻求开发有史以来最易被黑客攻击的网站。为什么要将其标记为
javascript
?它与JavaScript无关,它与PHP和cookies有关。您的查询可用于sql注入:
“从Username='”的帐户中选择密码“$\u POST['loginUn']”强制性链接重新编码的评论:&你不应该依赖cookie值,任何人都可以在他的浏览器/脚本中设置这些值,并假装是“管理员”。我知道你正在寻求开发有史以来最易被黑客攻击的网站。我如何解决这个缓存问题?我会看一看这个课程,谢谢。刚刚做了,但它不能解决问题。这些会话的使用也不起作用。我如何解决这个缓存问题?我会看一看这个课程,谢谢。刚刚做了,但它不能解决问题。这些会话的使用也不一样。您仍然应该使用
$\u SESSION
您仍然应该使用
$\u SESSION
<script type="text/javascript">
    alert("$un = <?php echo $un;?>");
</script>