我有這個奇怪的問題。我想製作一個使用用戶名來識別應該顯示哪些內容的頁面。它似乎工作正常,除了一件事。在特定頁面上從會話中讀取錯誤的值。我在瀏覽器中檢查了會話的值,但這裏的價值似乎是正確的。我會告訴你的代碼:閱讀時會話值錯誤
這是我的登錄功能,使用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來提醒值... –
這是無關緊要的。我已經移除了標籤。 –