繁体   English   中英

我什么时候应该删除用户的登录Cookie?

[英]When should I remove an user's login cookie?

我有一张这样的桌子:

// cookies
+----+---------+-------------------+------------+
| id | user_id |       token       |   expire   |
+----+---------+-------------------+------------+
| 1  | 32423   | dki3j4rf9u3e40... | 1467586386 |
| 2  | 65734   | erhj5473fv34gv... | 1467586521 |
| 3  | 32423   | 9b0u2ejfd43k4r... | 1467586619 |
| 4  | 21432   | 8u34ijf34t43gf... | 1467586640 |
+----+---------+-------------------+------------+

上表存储了所有登录cookie。 每个用户可能在上表中有多行(每行用于一个设备)

好的,在三种情况下,我必须从该表中删除一行:

  1. 用户退出(单行)
  2. 旧行(单行)
  3. 用户更改密码(所有行)

好吧,我有个主意,我需要一些建议:当登录cookie存在并且数据库中没有匹配的行时,我将从客户端浏览器中删除该cookie。 这可以吗? 还是我不应该那样做?

if ( isset($_COOKIE['login']) ) {

    // db connection here
    $stm = $db->prepare('SELECT id, name, lname, reputation, email, notification 
                         FROM users WHERE cookie = ? LIMIT 1');
    $stm->execute(array($_COOKIE['login']));
    $num_rows = $stm->fetch();

    if ( $num_rows ) {
        // all fine
    } else {
        unset($_COOKIE['login']);
        setcookie('login', '', time() - 3600, '/');
    }

}

请关注以下几行:

unset($_COOKIE['login']);
setcookie('login', '', time() - 3600, '/');

好吧,我在做什么是对的?

如果用户发送的cookie不在数据库中,则您将无法对其进行任何操作。 您不知道它是有效的cookie还是伪造的cookie。 您不知道它属于哪个用户。

您可以安全地删除它。 无论如何,它将使用新的正确登录名覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM