我剛剛爲我的網站做了註冊表單,但是我沒有關於如何記住用戶通過會話登錄的知識。我想我可以簡單地將他的IP存儲在我的數據庫上的一個表上,並在他登出時刪除它。如何識別登錄用戶?
這種方法有什麼問題嗎?如果有我應該做的而不是它呢?
我剛剛爲我的網站做了註冊表單,但是我沒有關於如何記住用戶通過會話登錄的知識。我想我可以簡單地將他的IP存儲在我的數據庫上的一個表上,並在他登出時刪除它。如何識別登錄用戶?
這種方法有什麼問題嗎?如果有我應該做的而不是它呢?
如果您使用的是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']);
}
通常你做這樣的事情
$_SESSION['logged_in'] = 1;
當用戶登錄,並檢查
if (isset($_SESSION['logged_in']) { ...
在後續請求,看看頁面上的用戶登錄或沒有。
無需數據庫。您可以在用戶登錄到會話時放置任何需要的細節,例如用戶的用戶名或其他標識符。
您的方法存在的一個問題是,大多數人沒有明確註銷網站,他們只是關閉標籤頁/窗口,而且您不知道何時發生。另一個是IP地址不能唯一標識用戶。
在您的登錄,您可以設置一個會話變量:
$_SESSION['is_logged_in'] = true;
,然後檢查它需要登錄的網頁:
<?php
if (!isset($_SESSION['is_logged_in']))
{
// redirect to login page
}
?>
這是一個非常非常簡單的方法,但會得到你開始了正確的方向。
這個問題的夫婦......你不在使用它之前檢查密鑰是否存在(PHP通知),當它不存在時否定它,並且將它與「true」進行比較,否定它會導致與您的評論意味着相反的邏輯。 –
你是對的...它應該使用isset() –
嗯是的..
您的用戶擁有IP可能會改變,而他在您的網站,或實際上可能是多臺電腦(使用NAT)。基本上,任何網絡可以使用相同的IP多臺計算機,如果一個人一臺計算機上登錄時,在同一網絡上的另一臺計算機也已登錄。
方式,一般是保存他的用戶信息中的會話。此會話僅標記他的計算機(因爲會話標識存儲在cookie中)。另外,爲了減少對數據庫的查詢,我通常只是在他登錄時將他的用戶名,ID等加載到會話中,然後在他註銷時清除會話。
你可以通過編寫'if(!empty($ _ SESSION ['logged_in_user'])''來簡化這段代碼,它將檢查變量是否被設置,不是空的。 –