2013-05-17 62 views
0

我一直在學習PHP和MySQL一段時間,並且遇到了一個問題。 我已經創建了一個用戶數據庫(MySQL),登錄表單和頁面,在成功登錄後,您將被鎖定爲重定向。重定向後會話變量丟失(使用標頭)

登錄頁面

<?php 

require_once 'login.php'; //connecting to db 
$db_server = mysql_connect($db_hostname, $db_username, $db_password); 
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database) 
or die("Unable to select database: " . mysql_error()); 

session_start(); // 
if (isset($_POST['username']) && 
isset($_POST['password'])) 

{ 
$username = $_POST["username"]; 
$password = $_POST["password"]; 

$salt1 = "qm&h*"; 
$salt2 = "[email protected]"; 

$query = "SELECT * FROM login WHERE username='$username'"; 
$result = mysql_query($query); 
if (mysql_num_rows($result) == 0) die("Wrong username or password."); 

elseif (mysql_num_rows($result)) 
{ 
    $row = mysql_fetch_row($result); 
    $crypt_login_pass = md5("$salt1$password$salt2"); 
    if ($crypt_login_pass == $row[2]) 
    { 
     $_SESSION['username'] = $username; 
     $_SESSION['password'] = $crypt_pass; 

     header("Location: index_account.php"); 
     exit; 
    } 
    else { 
     die("Wrong username or password."); 
    } 
} 
} 
?> 

代碼完美運行,直到我說了header("Location: index_account.php")。我曾經在那裏只有die("You are now logged in.")。 這裏是你supposted重定向到的頁面:

<?php 
session_start(); 
if (isset($_SESSION['username']) && 
isset($_SESSION['password'])) 
{ 
$username = $_SESSION['username']; 
$password = $_SESSION['password']; 

echo "Your username is '$username' 
and your crypted password is '$password'."; 
} 
else echo "Please <a href=index.php>click here</a> to log in."; 
?> 

所有這些代碼是在本地主機上運行。 問題是,$ _SESSION ['username']和$ _SESSION ['password']不會傳輸到第二頁(index_account.php)。我讀過很多帖子,而且我發現的最類似的是:Session variables lost after header redirect,但沒有安裝。 請注意,這是我的第一個編程語言(不包括HTML和CSS),我對此仍然很陌生。

P.S.對不起我的英語。這不是我的母語。

在此先感謝!

+0

[**請不要在新代碼**中使用'mysql_ *'函數](http://bit.ly/phpmsql)。它們不再被維護,[已正式棄用](http://j.mp/XqV7Lp),並且可能[在直播代碼中危險](http://bit.ly/4zUdtT)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – Jimbo

回答

5

您使用的是不存在的變量分配密碼:

$_SESSION['password'] = $crypt_pass; 

你的代碼定義$crypt_login_pass所以你應該使用來代替:

$_SESSION['password'] = $crypt_login_pass; 

此外,中$_SESSION['username']的值變從$username設置,如果未設置$_POST['username'],則其將爲空:

if (isset($_POST['username']) && 
    isset($_POST['password'])) 

{ 
    $username = $_POST["username"]; 

要解決此問題,請確保您的表單已在「用戶名」字段中發佈數據。

+0

非常感謝!不能相信這很簡單,我非常專注於$ _SESSION,我剛剛得知我完全忽略了這樣一個明顯的錯誤。 – rancor1223