我有一张这样的表:
// 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, '/');
嗯,我正在做的是正确的吗?
答案 0 :(得分:2)
如果用户发送的cookie不在您的数据库中,则您无法对其执行任何操作。您不知道它是有效的cookie还是伪造的cookie。您不知道它属于哪个用户。
您可以安全地删除它。无论如何,它都会被新的正确登录覆盖。