2012-11-06 34 views
0

我有幾個關於基於PHP會話登錄的問題。我已經使用了下面的教程來創建連接到我有一個現有的用戶數據庫登錄表單:關於基於PHP會話登錄的問題

http://www.sourcecodester.com/tutorials/php/4341/how-create-login-page-phpmysql.html

我瞭解大部分,但我只是想查詢了幾個東西,我不明白:

//Login Successful 
session_regenerate_id(); 
$member = mysql_fetch_assoc($result); 
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id']; 
$_SESSION['SESS_FIRST_NAME'] = $member['username']; 
$_SESSION['SESS_LAST_NAME'] = $member['password']; 
session_write_close(); 
header("location: home.php"); 
exit(); 

下面的代碼都在login_exec.php頁 - 我認爲這個代碼是在成功登錄時設置會話ID - 我是正確的?

我不明白的是「SESS_MEMBER_ID」,「SESS_FIRST_NAME」和「SESS_LAST_NAME」的原因 - 爲什麼在那裏,它在做什麼?

我的第二個問題。在「home.php」中 - 當用戶點擊「註銷」時,他們被引導回index.php,並以某種方式會話被銷燬。點擊「註銷」時,會話會如何被破壞。

第三,是否有可能改變「home.php」,以便有一個if/else語句表示「如果logged_in回聲」yay,您登錄了「與各種登錄內容,「否則,如果not_logged_in回聲」對不起,您沒有登錄,無法查看此頁面,請轉到下一頁登錄「。如果可能的話,我該怎麼做?

非常感謝

+0

哦,我只是發現當您單擊註銷什麼是終止會話 - 這將您重定向到的index.php和在頂部index.php,它終止了以前的sess離子。得到那部分! –

回答

3
//Login Successful 
session_regenerate_id(); 
$member = mysql_fetch_assoc($result); 
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id']; 
$_SESSION['SESS_FIRST_NAME'] = $member['username']; 
$_SESSION['SESS_LAST_NAME'] = $member['password']; 

下面的代碼都在login_exec.php頁 - 我認爲這 代碼是在成功登錄時設置會話ID - 我是正確?

是的,它設置了會話,並且在保存會話之前還保存了一些會員信息。這樣,信息就可以在沒有進一步查詢數據庫的情況下使用。更多的,如果信息是而不是存在,我們知道用戶沒有被認證。

您還可以存儲整個的$member

$_SESSION['member'] = $member; 

但這樣做節省了密碼也,這不是很好的做法,有密碼未來沿着隱藏在會話中的所有後續頁。你可以這樣做,雖然:

unset($member['password']); // $member is a copy of the database row, untouched. 
$_SESSION['member'] = $member; 

我的第二個問題。在「home.php」 - 當用戶點擊「註銷」時,他們 被引導回index.php,並以某種方式被銷燬 。當 單擊「註銷」時,會話如何正好被破壞。

通常這是通過重定向和session_destroy完成的。

第三,是有可能改變「home.php」所以,有一個 如果地方/ else語句,說什麼「如果LOGGED_IN回聲 ‘耶,你登錄’與各種!的登錄內容

是,使用上述$ _SESSION:

<?php 
    if (!empty($_SESSION['SESS_MEMBER_ID'])) 
    { 
?> 

    Welcome, <?php print $_SESSION['SESS_FIRST_NAME']; ?>! 

<?php 
    } else { 
?> 
    Sorry, you need to <a href="login.php">LOGIN!</a> 
<?php 
    } 
?> 
+0

謝謝你的非常詳細的答案!我現在知道了 :) –

0

是:session_regenerate_id();是設置你的會話ID。

其他會話變量被設置(SESS_MEMBER_ID等),所以你不必一直查詢數據。所以這些變量(ID,名字和姓氏)被存儲在會話中。因此,您可以簡單地爲「歡迎Zach」執行<? echo "Welcome ".$_SESSION['SESS_FIRST_NAME']; ?> ...此外,您還可以執行進一步檢查,以確保會話數據與該成員的數據庫記錄相匹配,以確保其未被欺騙。

第三,你可以做

if(!empty($_SESSION['SESS_MEMBER_ID'])){ echo "Yay ".$_SESSION['SESS_FIRST_NAME'].", you are logged in"; }else{ echo "XX"; }