【发布时间】:2026-01-28 08:00:01
【问题描述】:
为了我的 Joomla! 3.8+ 扩展我需要能够查找和删除(取消链接)将存储在 session_save_path 中的 PHP 会话文件(名为 'sess_' + 会话 ID),例如/tmp。我知道存储会话文件的是 PHP,而不是 Joomla! (Joomla!会话处理程序设置为“PHP”) 我的问题:将通过使用 Joomla 创建的 PHP 会话文件!我的扩展程序的 PHP 代码始终可以读/写网站,该代码是同一个 Joomla 的一部分!安装?
补充:我后来意识到,我在我的问题中省略了“总是”这个词,现在我已经添加了。
补充:更深入地解释我想要实现的目标。 正如我所说,我有一个 Joomla!网站,用户可以登录的地方。 该问题仅适用于 Joomla!配置为会话处理程序设置为“PHP”(而不是“数据库”)。当 Session Handler 为 'database' 时,没有问题。
基本上,我想实现以下目标(将 Joomla! 会话处理程序设置为“PHP”):
1> 用户打开浏览器 A 并登录网站和 Joomla! 在数据库中记录相关的会话 ID 和用户 ID。
2>同一个用户打开不同的浏览器B(可能在不同的IP) 并想登录同一个网站。
3> 因为用户已经通过浏览器A登录了网站, 不允许他/她再次登录,并会收到一个 可点击的链接将破坏他的所有其他会话,包括 一个使用浏览器 A(我们已经记录了所有其他的会话 ID 会话)。
仅在第 3 步中的 session_destroy() 只是部分起到了作用,因为被破坏的会话细节会在 Joomla 上重新出现一段时间后!后端,也在 Joomla!会话表。虽然这不会干扰 Joomla!前端,它不干净,我想避免它,以防万一。 到目前为止,最好的解决方案是我是否可以删除 PHP 会话文件(例如在 dir /tmp 中并命名为“sess_....”)。我已经对此进行了测试,并且效果很好。但是...它依赖于始终具有对 PHP 会话文件的删除访问权限(使用 session_save_path() 和 unlink($session_file_path)),这是我发布的问题的基础。 我发现并非总是可以删除 PHP 会话文件;这取决于提供者的 PHP 配置。由于它是我正在开发的商业应用程序,因此该过程必须适用于所有配置,即包括那些不允许删除访问会话文件的配置。
我会继续寻找解决方案,找到后会在此处发布。
【问题讨论】:
-
我不知道 Joomla,但是如果服务器配置为使用数据库或缓存来存储会话数据怎么办?
-
只是好奇,您要解决什么问题需要直接删除 PHP 会话?也许有不同的解决方案?
-
@RyanVincent 我已经编辑了我的帖子以包含您问题的答案
标签: php session destroy read-write