我有一個問題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的值,因爲他們取消了登錄。
可能將會話信息存儲在數據庫中?儘管如此,這可能不是完全的傻瓜。 – Maximus2012 2015-03-31 14:37:12
這可能工作。我將如何存儲會話中的設備信息? – David 2015-03-31 14:47:30
我相信你可以使用$ _SERVER和$ _SESSION超全局數組來獲得用戶/設備信息的獨特組合。 $ _SERVER會給你客戶端的瀏覽器和IP地址:http://php.net/manual/en/reserved.variables.server.php。我不認爲你可以得到MAC地址,並不認爲你甚至需要這個。 – Maximus2012 2015-03-31 14:50:58