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 页面