MySQL而不是PHP Session

时间:2013-01-19 11:32:22

标签: php mysql authentication session-cookies

我应该使用哪种方法来登录我的用户,例如谷歌的Gmail? (如果您愿意,您可以保持几乎无限时间登录 - 保持登录功能 - 即使您的IP在会话中间更改,gmail仍然可以识别您的身份)。

PHP会话持续到浏览器关闭(或1440秒),即使使用session_set_cookie_parameters()我也不知道这是不是一个好习惯。我宁愿使用MySQL表。一个用于用户登录尝试,一个用于会话,但我想知道如何实现此目的。

如何识别用户? IP不好,它可以改变,如果用户使用代理怎么办?我想要的只是使用安全便捷的方式。

让我们放下Network EavesdroppingCross-site Scripting,我会尽最大努力对付这些攻击。使用登录尝试日志记录会拒绝暴力攻击,并且我使用预准备语句不能注入sql。

我的另一个问题是,如果我想要一个自己的登录系统,如何防止会话劫持?

1 个答案:

答案 0 :(得分:0)

我使用第二个特定的cookie(即不是会话cookie),名为 ALWAYS

  • 该cookie设置的寿命很长(例如一年)
  • 它的值是唯一的,在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 ALWAYS,并在DB中将该值设置为 null

这样,以前登录的用户(会议一年,可以更改)在会话过期时自动从最初登录的同一浏览器登录。

当用户退出时,通过从DB中删除值来删除被盗(...)的cookie的可能性。因此,即使它可能被盗,也不能再使用了。