2015-03-31 67 views
0

我有一個Google App Engine PHP網站。我有一個註冊系統,所以用戶登錄並保存到數據庫。只能訪問某些設備的網站

我希望能夠讓用戶只能通過2個設備訪問。所以如果他們嘗試使用第三個設備登錄,那麼他們將不被允許。例如,用戶設備(IP地址或MAC地址或其他)將被保存,並且如果用戶嘗試使用未保存或與保存的設備憑據不匹配的設備登錄,那麼爲什麼會被拒絕訪問。

所以爲了讓用戶更清楚(用戶名i001),有一部手機和一臺筆記本電腦。因此,用戶可以在使用手機和筆記本電腦時登錄網站,但不能使用其他設備。

有什麼辦法可以做到這一點嗎?

+0

可能將會話信息存儲在數據庫中?儘管如此,這可能不是完全的傻瓜。 – Maximus2012 2015-03-31 14:37:12

+0

這可能工作。我將如何存儲會話中的設備信息? – David 2015-03-31 14:47:30

+0

我相信你可以使用$ _SERVER和$ _SESSION超全局數組來獲得用戶/設備信息的獨特組合。 $ _SERVER會給你客戶端的瀏覽器和IP地址:http://php.net/manual/en/reserved.variables.server.php。我不認爲你可以得到MAC地址,並不認爲你甚至需要這個。 – Maximus2012 2015-03-31 14:50:58

回答

1

我有一個問題simliar和Symfony的2下列方式處理它:

每個用戶都有登錄在同一時間的最大金額,爲您的情況下,我們採取2.我也有現在有一個字段用於證明有多少登錄是免費的。

因此,我們有以下數據庫:

maxLogins|loginsFree 
2  |2 

隨着每一次登錄,用戶ID,會話ID和登錄的日期時間將被保存到數據庫中。在登錄過程中,loginsFree列將被減少。

因此,我們有以下幾點:

//After Login 
maxLogins|loginsFree 
2  |1 

的邏輯很簡單,以限制登錄

if($freeLogins == 0){ 
    //give out an message or something 
} else { 
    //do your login 
} 

內的訪問,如果用戶登錄你的系統,loginsFree將增加1。

//After Logout 
maxLogins|loginsFree 
2  |2 

重要

您不能通過maxLogins值增加loginsFree值,否則用戶可以更頻繁地登錄,然後同時登錄2次。

另外,因爲我通過會話解決了這個問題,所以我需要一個在閒置一段時間後無效會話的進程。那些無效的會話也必須增加loginsFree的值,因爲他們取消了登錄。

+0

謝謝你的詳細解釋。這就說得通了。你的數據庫有多少個字段?像你的數據庫表是什麼樣子? – David 2015-03-31 15:25:47

+0

@David我的數據庫保存了會話ID,用戶ID和上次活動的時間,這些活動將由用戶在此會話中進行的每個活動更新。如果上次活動的日期時間較早,則在給定時間會話將失效 – KhorneHoly 2015-04-01 06:49:51

相關問題