2013-10-26 49 views
1

我有這個奇怪的問題。我想製作一個使用用戶名來識別應該顯示哪些內容的頁面。它似乎工作正常,除了一件事。在特定頁面上從會話中讀取錯誤的值。我在瀏覽器中檢查了會話的值,但這裏的價值似乎是正確的。我會告訴你的代碼:閱讀時會話值錯誤

這是我的登錄功能,使用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的順便說一句)認爲它始終是管理員登錄?

+0

爲什麼標記爲'javascript'?它與JavaScript無關,它與PHP和cookie有關。 –

+0

我用javascript來提醒值... –

+0

這是無關緊要的。我已經移除了標籤。 –

回答

0

我剛剛發現我做錯了什麼。一段我發現不相關的代碼,錯過了a =,因此變量沒有被比較,但被設置爲錯誤的值。

+0

你應該仍然使用'$ _SESSION' – kelunik

1

正如前面在評論中提到的那樣,腳本中存在很多安全風險。

你應該看看PHP的sessions來建立你的登錄。使用會話時,將只有一個存儲ID的cookie,所有數據將存儲在您的服務器上,並且不能由用戶修改。

您的問題與'管理員'保持爲cookie值可能是一個緩存問題。

+0

我該如何解決這個緩存問題?我會看看這個會議,謝謝。 –

+0

您是否嘗試清除瀏覽器的緩存? – kelunik

+0

剛剛做過,但並未解決問題。這些會話的使用也沒有。 –