2013-01-19 88 views
0

我應該使用什麼方法來保持登錄我的用戶,如谷歌的Gmail? (如果你願意,你可以保持幾乎無限的時間登錄 - 保持登錄功能 - 即使你的IP在會話期間改變了,gmail仍然可以識別你)。MySQL而不是PHP會話

PHP會話持續到瀏覽器關閉(或1440秒),即使使用session_set_cookie_parameters()我不知道這是否是一種好的做法。我寧願用MySQL表代替。一個用於用戶登錄嘗試,另一個用於會話,但我不知道該怎麼做。

如何識別用戶? IP不好,它可以改變,如果用戶使用代理,該怎麼辦?我想要的只是使用安全和便捷的方式。

讓我們暫時擱置Network EavesdroppingCross-site Scripting,我盡我所能來應對這些攻擊。蠻力攻擊將被拒絕使用登錄嘗試日誌記錄,我使用準備好的語句不能sql注入。

我的另一個問題是,如果我想要一個自己的登錄系統,我該如何防止會話劫持?

+0

會話令牌。但要小心,因爲任何火焰守護者都可以使用它;使用HTTPS將解決這個問題。看看Twitter或Facebook做什麼。 –

回答

0

我使用第二個特定的Cookie(即不會話cookie),命名爲ALWAYS

  • 該cookie設置爲一個長壽命(如1年)
  • 它的值是唯一的,確定的在PHP基於UID和其他隨機(時間...)的東西,從一個哈希鍵(選擇你的算法 - md5被認爲是弱),例如「df67ewbhca9fasdi383hd.347234892.HASHFROMUIDSPECIFIC」
  • 該值存儲在MySQL - 用戶行 - 當用戶登錄時
  • 以下算法之後

    user_login() { 
        if (not signed in) { 
        if (cookies[ALWAYS] is present AND value is in DB AND not null) { 
         log the user from that row , automatically 
         create his session 
        } 
        else { 
         regular_login() 
        } 
        } 
    } 
    
  • 當用戶註銷,刪除cookie始終,並將該值設置爲在DB

通過這種方式,用戶誰登錄在以前,當會話過期時(從一開始登錄的同一瀏覽器)自動登錄(一年可更改)。

當用戶註銷時,刪除可能性通過刪除數據庫中的值,從而竊取了(...)的Cookie。因此,即使它可能被盜,它也不能再被使用。