2011-08-08 71 views
0

我剛剛爲我的網站做了註冊表單,但是我沒有關於如何記住用戶通過會話登錄的知識。我想我可以簡單地將他的IP存儲在我的數據庫上的一個表上,並在他登出時刪除它。如何識別登錄用戶?

這種方法有什麼問題嗎?如果有我應該做的而不是它呢?

回答

1

如果您使用的是PHP比你可以這樣做:

$_SESSION['logged_in_user'] = $username; 
... 
    // When you want to display something that is only for logged in users you do this: 
    if (!empty($_SESSION['logged_in_user'])) 
    { 
    // Authenticated user 
    ... 
    } 
    else 
    { 
    // Not authenticated user 
    ... 
    } 

當他註銷,你從會話刪除用戶名

if(isset($_SESSION['logged_in_user'])) 
{ 
    session_unset($_SESSION['logged_in_user']); 
} 
+1

你可以通過編寫'if(!empty($ _ SESSION ['logged_in_user'])''來簡化這段代碼,它將檢查變量是否被設置,不是空的。 –

1

通常你做這樣的事情

$_SESSION['logged_in'] = 1; 

當用戶登錄,並檢查

if (isset($_SESSION['logged_in']) { ... 

在後續請求,看看頁面上的用戶登錄或沒有。

無需數據庫。您可以在用戶登錄到會話時放置任何需要的細節,例如用戶的用戶名或其他標識符。

您的方法存在的一個問題是,大多數人沒有明確註銷網站,他們只是關閉標籤頁/窗口,而且您不知道何時發生。另一個是IP地址不能唯一標識用戶。

-1

在您的登錄,您可以設置一個會話變量:

$_SESSION['is_logged_in'] = true; 

,然後檢查它需要登錄的網頁:

<?php 
    if (!isset($_SESSION['is_logged_in'])) 
    { 
    // redirect to login page 
    } 
?> 

這是一個非常非常簡單的方法,但會得到你開始了正確的方向。

+0

這個問題的夫婦......你不在使用它之前檢查密鑰是否存在(PHP通知),當它不存在時否定它,並且將它與「true」進行比較,否定它會導致與您的評論意味着相反的邏輯。 –

+0

你是對的...它應該使用isset() –

1

嗯是的..
您的用戶擁有IP可能會改變,而他在您的網站,或實際上可能是多臺電腦(使用NAT)。基本上,任何網絡可以使用相同的IP多臺計算機,如果一個人一臺計算機上登錄時,在同一網絡上的另一臺計算機也已登錄。

方式,一般是保存他的用戶信息中的會話。此會話僅標記他的計算機(因爲會話標識存儲在cookie中)。另外,爲了減少對數據庫的查詢,我通常只是在他登錄時將他的用戶名,ID等加載到會話中,然後在他註銷時清除會話。