2013-01-19 54 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。因此,即使它可能被盗,它也不能再被使用。