我有这个奇怪的问题。我想制作一个使用用户名来识别应该显示哪些内容的页面。它似乎工作正常,除了一件事。在特定页面上从会话中读取错误的值。我在浏览器中检查了会话的值,但这里的价值似乎是正确的。我会告诉你的代码:阅读时会话值错误
这是我的登录功能,使用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'];
}
}
?>
它似乎很好地工作,因为它在使用它的页面。 我已经在数据库中制作了一些虚拟帐户,使用这些用户名:Admin和User。 这里是页面的代码出了问题:
PHP:
//THIS IS NOT THE SAME PAGE AS THE PREVIOUS PHP CODE
$login = false; //CHECK IF USER HAS LOGGED IN
$un = "";
if(isset($_SESSION['login'])){
$login = $_SESSION['login']; //IF LOGGED IN SET TO SESSION VALUE
$un = $_SESSION['Username']; //SET $UN TO USERNAME IN SESSION
}
然后我用JavaScript和PHP,以提醒该变量包含的值:
<script type="text/javascript">
alert("$un = <?php echo $un;?>");
</script>
与登录变量似乎没有问题,因为它具有良好的价值,但变量$ un是错误的。当我没有登录时,它没有任何价值,这是正确的,但是当我登录时,它包含值Admin,即使我没有使用Admin登录。在浏览器选项中,cookie值似乎是正确的。我检查了每个页面上的cookie,它工作得很好,只是不在这个页面上。我在做什么错误,使得浏览器(这是Firefox的顺便说一句)认为它始终是管理员登录?
为什么标记为'javascript'?它与JavaScript无关,它与PHP和cookie有关。 –
我用javascript来提醒值... –
这是无关紧要的。我已经移除了标签。 –