2014-06-30 62 views
-5

我的用戶驗證在我的登錄中工作正常,唯一的問題是它不存儲PHP SESSION。我已經調試過它,看看是否有會話被存儲,但它們不會。因爲當我發送用戶到目標頁面。

如果用戶已登錄,目的地頁面將與if (!isset($_SESSION['username'])) { etc.. } 進行覈對。否則,它會將用戶發送回登錄頁面。所以這就是錯誤,它發送用戶回到登錄頁面..當然,以確認調試說所有NULL。

PHP5:

<?php require ('../lib/config.php'); ?> 
<?php 
ob_start(); 

if (isset($_POST["username"]) && !empty($_POST["username"]) && isset($_POST["password"]) && !empty($_POST["password"])) { 
$tbl_name='users'; 
$user_name='Username'; 
$pass_name='Password'; 
$salt=''; 

mysql_connect("$cchost", "$ccuser", "$ccpass")or die("cannot connect"); 
mysql_select_db("$ccname")or die("cannot select DB"); 


$myusername=$_POST['username']; 
$mypassword=$_POST['password']; 
$username=str_replace(' ','_', $myusername); 
$password=hash('whirlpool', $salt . $mypassword); 

$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 
$sql="SELECT * FROM $tbl_name WHERE $user_name='$username' and $pass_name='$password'"; 
$result=mysql_query($sql); 
$row=mysql_fetch_array($result); 
$donator=$row['donator']; 
$player=$row['player']; 
$count=mysql_num_rows($result); 
if ($donator == '1') { 
$_SESSION['donator'] = $donator; 
} 
if ($player == '1') { 
$_SESSION['player'] = $player; 
} 
if($count==1){ 
$_SESSION['username'] = $username; 
header("Location: index_ucp.php"); 
} 
else { 
header("Location: login_ucp.php?err=1"); 
} 
} 
else { 
header("Location: login_ucp.php?err=9"); 
} 
ob_end_flush(); 
?> 
+4

使用session_start(); –

+0

http://www.php.net/manual/en/session.examples.basic.php請注意,在處理所有示例中的$ _SESSION之前,總是會調用'session_start()'。 – r3wt

回答

0

使用session_start();在ob_start()之後;

+0

爲什麼'session_start'必須被調用_after_'ob_start'的任何原因? – zamnuts

+0

Dohh,當然。我的小錯誤再次。 –

+0

@zamnuts不,它不必。你根本不需要調用ob_start。這是舊的PHP。 – r3wt

0

如果

session_start(); 

在conf.php使用。那麼應該沒有問題。

但是,如果沒有這樣的語句,然後插入這在開始。

或者包含File havind session_start();碼。

2

可以肯定,並在php.ini致電session_start()在您要使用會話的所有網頁的開頭,或設置session.auto_start = 1;

編輯,而我在這裏,讓我罵你關於你的方式哈希密碼

智者曾告訴我永遠不要推出我自己的密碼哈希。我現在將把祕密傳遞給你。由於PHP 5.3,PHP內置了哈希和驗證密碼的功能。這些功能是:

password_hash()password_verify()

密碼哈希需要一個參數,明文字符串哈希值。密碼驗證需要兩個參數,明文字符串和哈希來測試匹配。十分簡單。

//first we define how costly we want this to be for our cpus to calculate this hash. 
$options = [ 
     'cost' => 11, 
    ]; 

$encrypted = password_hash($plainText, PASSWORD_BCRYPT, $options);//BCRYPT hashes look like so $ STRENGTH $. HASH/SALT 

//this is useful because you never have to remember the salt or strength for a given password hash 

if(password_verify($plainText,$encdata)) 
{ 
    //good to go 
}else{ 
    //wrong password! 
}