为我的Joomla! 3.8+扩展名我需要能够找到和删除(取消链接)PHP会话文件(名为“ sess _” +会话ID),该文件将存储在session_save_path中,例如/ tmp。我了解是由PHP存储会话文件,即不是Joomla! (Joomla!会话处理程序设置为“ PHP”) 我的问题:请问通过使用Joomla创建的PHP会话文件!我的扩展程序的PHP代码(始终是同一Joomla的一部分)始终可以读取/写入网站!安装吗?
添加:后来我意识到,我在问题中省略了“始终”一词,现在我已经添加了。
添加:关于我要实现的目标的更深入的解释。 正如我说的,我有一个Joomla!用户可以登录的站点。 该问题仅适用于Joomla!将会话处理程序设置为“ PHP”(而不是“数据库”)进行配置。当会话处理程序为“数据库”时,没有问题。
从根本上讲,我想实现以下目标(将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配置。由于这是我正在开发的商业应用程序,因此该过程必须适用于所有配置,即包括那些不允许删除对会话文件的访问权限的配置。
我将继续搜索解决方案,并在找到它后将其发布在这里。
答案 0 :(得分:1)
可能经常可能,但是会带来安全风险(请考虑:一个用户在知道会话文件属于谁之前可以先读取会话文件 ,其他用户),因此具有安全意识的ISP将努力防止这种情况的发生。
因此,即使您设法做到这一点,也无法保证ISP在将来加强其安全性时不会破坏您的代码。这使维护变得有些不安。
一个更好的解决方案是拥有一个无效的会话ID 的辅助表。
然后,您编写一个钩住onUserAuthorization
和onUserLogout
事件的用户插件。您还将需要onAfterInitialise
。
此钩子将在初始化时检查当前会话ID是否已失效;如果是,则立即注销。否则,其时间戳将被更新。
在用户注销时,将从表中删除当前会话ID,并销毁会话。
在重新登录时,会发出有关其他会话正在打开的警告:如果登录成功,则同一用户的所有其他会话将被标记为无效。
作为维护任务,可以安全清除所有时间戳大于最大会话生存期的条目。
答案 1 :(得分:0)
这取决于服务器设置。
答案 2 :(得分:0)
谢谢@Nigel和@AgeDeO
通过反复试验,我发现答案是否定的,并非总是如此。 通过与一些商业ISP一起执行代码,我遇到了一个ISP,它不允许我删除PHP会话文件,而该文件位于默认位置。位置是/ var / lib / php5。