0

我应该使用什么方法来保持我的用户的登录状态,比如 google 的 gmail?(如果您愿意,您几乎可以无限期地保持登录状态 - 保持登录功能 - 即使您的 IP 在会话中更改,gmail 仍然可以识别您)。

PHP 会话一直持续到浏览器关闭(或 1440 秒),即使使用session_set_cookie_parameters()我不知道这是否是一个好习惯。我更喜欢使用MySQL表格。一个用于用户登录尝试,一个用于会话,但我想知道我应该如何完成这个。

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

让我们搁置一旁Network EavesdroppingCross-site Scripting我尽我所能来应对这些攻击。使用登录尝试日志记录将拒绝蛮力攻击,并且我使用准备好的语句来不注入 sql。

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

4

1 回答 1

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,并在 DB 中将该值设置为null

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

当用户注销时,通过从数据库中删除值来消除 cookie 被盗的可能性 (...)。因此,即使它可以被盗,它也不能再使用了。

于 2013-01-19T11:50:42.043 回答