2015-01-20 104 views
1

我们使用PHP并将会话数据存储在memcached中。有没有一种方法可以使给定用户ID的所有会话无效?用例是,当用户更改密码时,我们将其注销,但我们也应该使该用户标识下的每个其他会话无效。通过用户标识使PHP失效所有会话

这可能吗?

回答

0

我想你必须在每个请求上添加一个检查,以确保用户上下文仍然有效。

首先想到的是在后端存储中有一条记录,其中包含用户密码已更新的时间戳记。当用户登录时,您可以使用时间戳写入cookie或将其存储在会话中。在随后的请求/检查时,只要cookie/session日期比它通过的密码更改日期更新。当密码更改时,后端记录上的日期设置为当前时间戳,并且下一次检查将失败并销毁用户会话。

所以在这种情况下,实际失效将不会发生,直到下一个请求来自旧会话。

+0

这是优雅的。我正在考虑将当前会话ID和用户ID存储在数据库中,然后调用'session_id($ session_id_to_destroy);在session_start(); session_destroy(); session_write_close();' – Justin 2015-01-20 21:25:18

+0

需要考虑的一点是,您可能会遇到与实际会话存储之间的同步问题。您必须保持用户在该表中处于活动状态的所有会话ID,并确保在用户注销或通过正常流程失效时将其删除。 – 2015-01-20 21:28:50