【问题标题】:Single session implmentation in symfony 3.3symfony 3.3 中的单会话实现
【发布时间】:2018-08-05 20:52:00
【问题描述】:
我目前正在寻找一种在 symfony 3.3 中实现单个会话的方法,我想要的是,如果我从一个浏览器登录,然后从同一用户的另一个浏览器登录,我想从第一次注销会话。
一种不简单的方法是将最新的会话 ID 存储在用户实体中,然后在每次请求时查询该 ID,如果会话 ID 不同且较旧,则用户将被重定向到注销路由。
我想知道是否有人知道实现这一点的更简单方法,这可能不在 symfony 文档中。
谢谢。
【问题讨论】:
标签:
php
symfony
session
symfony-3.3
【解决方案1】:
我通过使用 redis 缓存解决了这个问题,我将用户 ID 保存为键,将会话 ID 保存为键中的数据。然后在每次请求时,我都会在 redis 中搜索当前用户是否有密钥。如果没有,那么我为该用户创建了一个密钥,并将会话 ID 作为数据。如果是,那么我检查密钥中的会话 ID 是否与当前会话 ID 相同。如果相同,则我只是正常继续,否则我从会话处理程序中删除旧会话并将新会话放入密钥中。
我还使用 redis 作为会话处理程序,所以我只是在旧会话 id 上调用了destroy。