php - 检查 sessionid 已知的 PHP session 是否处于事件状态

标签 php session laravel-5.3

我们正在为客户锁定一些库存,锁定库存的表包含锁定库存的 session ID 以及有关客户的其他信息。当 session 到期时,我们想要解锁该库存,以便其他人可以购买它。因为我们在表中注册了 session_id(),知道它,有没有办法在 PHP 中检查 session 是否仍然处于事件状态?

如果我们使用数据库来保持 session ,我们可能会检查该行是否存在以及最后一次事件是什么时候,在 memcached 中我们可能会找出 session 的 key 并像那样检查它,因为文件 session 我们可以做同样的事情,找出 session 的文件名并检查文件是否存在。

无论您在何处举行 session ,是否有任何地方都适用的东西?

最佳答案

总而言之,您是在询问 PHP 中是否存在访问任何 session 的通用方法。尽管问题中的用例是合理的,但能够按照您的建议进行操作的影响会带来巨大的安全风险。

这就是为什么 PHP 中的内置 session 功能使您难以执行所需操作的原因之一。

理论上您可以使用 inbuilt PHP session functions指定特定的 session ID 并查找它们。我刚刚做了一些简单的测试,并没有取得太大的成功。只有一个用于加载 session 的内置函数'session_start ' 这将需要重复调​​用。手册明确指出这行不通:

As of PHP 4.3.3, calling session_start() after the session was previously started will result in an error of level E_NOTICE. Also, the second session start will simply be ignored.

可能仍然可以解决这个问题,也许可以使用 fork 或其他聪明的 fiddle 。但是您的代码将以一种模糊的方式工作,这可能会破坏 future 的 PHP 更新或可能干扰现有的实时 session 。

最好的解决方案是编写一个特定于正在使用的 session 处理程序的工具,允许对 session 进行只读访问。问题中的场景甚至不需要访问 session 数据,只需要可用于计算到期时间的时间戳信息。

在"file" session 处理的情况下。可以使用 ini_get('session.save_path'); 发现 session 文件存储的路径。检查脚本可能需要以与 Web 服务器相同的权限运行才能访问此位置。

脚本需要按计划频繁运行以检查过期 session 并从 list 中移除锁。

关于php - 检查 sessionid 已知的 PHP session 是否处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289043/

相关文章:

php - Google 建议的指标 num_queries 是什么

php - 从我的网站向 Twitter 帐户发布推文时如何将文本设为粗体或斜体

php - 从 Gmail、Yahoo、Hotmail 等导入电子邮件 ID,用于 "Tell a Friend"类似 PHP 中的功能

php - 如何让 session 允许不同的项目?

php - 在ElasticSearch中搜索

php - 如何在他/她的拍卖结束时自动通知用户?

php - Laravel 本地化不起作用

php - PHP session 的 iPhone 问题

php - spatie/laravel-analytics 中的 service_account_credentials_json

mysql - Laravel DB 查询连接多个表并获取条件数据