【问题标题】:Add to Laravel session by Session Id?按会话 ID 添加到 Laravel 会话?
【发布时间】:2015-02-23 09:49:01
【问题描述】:

我正在尝试通过使用 Laravel SessionId 将一些变量添加到 Laravel 会话中。这样做的原因是我正在尝试从远程源(队列作业)更新会话数据,并让客户端能够通过 AJAX 获取请求检索此数据。该作业可能会运行几分钟或几小时,因此我需要一种方法来相应地更新客户端。

我的想法是我将 Laravel SessionId(通过Session::getId())发送到作业,作业通过 sessionId 查找 Session 并将属性动态推送到会话,而客户端通过 AJAX 长轮询到主服务器返回由作业推送到会话的属性,然后删除所有刚刚刷新到客户端的属性。

如果有帮助的话,我还在 Amazon ElastiCache 上使用 Redis 集群驱动程序。

从我目前看到的情况来看,访问会话的唯一方法是使用 Session 外观,这是一个静态类,我基本上是在寻找诸如 $session = SessionAccessor::findSessionById($sessionId) 之类的东西效果。

这在 Laravel 中可行吗?

【问题讨论】:

  • 使用原始 PHP 也不是不可能的,因为不可能知道有多少其他会话已启动以及它们的 ID。但是必须有另一种方法来解决这个问题
  • 我没有使用原始 PHP 会话;我使用的是 Redis 集群,绝对可以连接到 Redis 并直接操作存储的数据,但是我试图找出一种使用 Laravel 框架的方法。

标签: php session laravel


【解决方案1】:

我不相信您想为此使用会话。如果会话在排队作业等之前结束会发生什么情况。会话 ID 可以在作业等期间更改。

我要做的是创建一个jobs 表或其他东西 - 并拥有登录的用户 ID 和工作 ID,以及一个“状态”。然后排队的作业在完成后简单地更新数据库表。

同时,您的 AJAX 轮询命中一条检查数据库以获取最新状态的路由。

【讨论】:

  • 好主意!我认为我将采用的方法是将“job:$userid:messages”之类的键插入 Redis,让 AJAX 轮询 /get-status 之类的路由,并使用这样的键直接从 Redis 中提取数据。我真的不想为此使用数据库表,因为 Redis 会更快,而且我真的不想为此使用另一个表。谢谢,接受!
猜你喜欢
  • 2015-04-26
  • 1970-01-01
  • 2014-06-27
  • 2013-12-30
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
相关资源
最近更新 更多