symfony 3.3中的单个会话实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了symfony 3.3中的单个会话实现相关的知识,希望对你有一定的参考价值。

我目前正在搜索在symfony 3.3中实现单个会话的方法,我想要的是,如果我从一个浏览器登录然后从同一用户的另一个浏览器登录,我想从第一个会话中注销。

一种非简单的方法是将最新的会话ID存储在用户实体中,然后在每个请求上查询,如果会话ID不相同且更旧,则用户被重定向到注销路由。

我想知道是否有人知道一种更简单的方法来实现这可能不在symfony文档中。

谢谢。

答案

我通过使用redis缓存解决了这个问题,我将用户ID保存为密钥,将会话ID保存为密钥内的数据。然后在我用redis搜索的每个请求上是否有当前用户的密钥。如果没有,那么我为会话ID为数据的用户创建了一个密钥。如果是,那么我检查密钥内的会话ID是否与当前会话ID相同。如果它是相同的那么我只是继续正常,如果不是我从会话处理程序中删除旧会话并将新会话放在密钥内。

我也使用redis作为会话处理程序,所以我只是在旧的会话ID上调用了destroy。

以上是关于symfony 3.3中的单个会话实现的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2.3 Bad Credentials 自定义提供程序

Symfony 5:/lucky/number 应用程序的 404 页面

如何销毁 Symfony 2 中的所有会话

如何在事件订阅者中访问 Symfony 3.3 中的登录用户而不会丢失 Web Profiler

单个 symfony 路由中的多个模式

如何在事件订阅者中访问Symfony 3.3中的登录用户,而不会丢失Web分析器