Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 何时删除用户';什么是登录cookie?_Php_Mysql_Security_Cookies - Fatal编程技术网

Php 何时删除用户';什么是登录cookie?

Php 何时删除用户';什么是登录cookie?,php,mysql,security,cookies,Php,Mysql,Security,Cookies,我有一张这样的桌子: // cookies +----+---------+-------------------+------------+ | id | user_id | token | expire | +----+---------+-------------------+------------+ | 1 | 32423 | dki3j4rf9u3e40... | 1467586386 | | 2 | 65734 | erhj5473fv3

我有一张这样的桌子:

// cookies
+----+---------+-------------------+------------+
| id | user_id |       token       |   expire   |
+----+---------+-------------------+------------+
| 1  | 32423   | dki3j4rf9u3e40... | 1467586386 |
| 2  | 65734   | erhj5473fv34gv... | 1467586521 |
| 3  | 32423   | 9b0u2ejfd43k4r... | 1467586619 |
| 4  | 21432   | 8u34ijf34t43gf... | 1467586640 |
+----+---------+-------------------+------------+
上表存储了所有登录cookie。每个用户可以在上面的表中有多行(每行用于一个设备)

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

  • 用户注销(单行)
  • 旧行(单行)
  • 用户更改其密码(所有行)
  • 我有个主意,我需要一些建议:当登录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。您不知道它属于哪个用户


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

    对于cookie数组,您只有一个
    ,因此用户只能在该键中存储一个值。因此,只应保留最近存储的值,因为以前的所有值都可能被覆盖。@MarcB我的意思是,如果存在cookie,但其值与数据库不匹配,则该cookie是无用的。也似乎有点可疑。。我为什么要留着它?