【发布时间】:2020-05-27 05:29:50
【问题描述】:
我有一个 PHP 应用程序,当用户浏览应用程序时,它使用会话来保留用户信息/权限等。我现在被要求配置系统以防止同一用户多次登录。我不能使用 cookie。
作为我的身份验证过程的一部分,我跟踪用户何时登录等,因此想到捕获用户的 PHP 会话值(使用 session_id()),将其存储在数据库中,然后在用户选择时取消该字段注销(或通过不活动自动注销)。通过更新的登录过程,这应该是可能的。
我喜欢这种方法,它非常简洁,但如果用户在没有完全注销的情况下关闭浏览器,它的缺点是不会使 sessionID 无效。于是我开始思考:如果 sessionid 中有 一个值,为什么不检查 PHP 是否认为它仍然有效?
现在从记忆中我似乎记得一个 PHP 函数,它会告诉我特定会话是否仍然有效。我以为这是session_id(),但我不认为是这样,因为它获取或设置了当前会话。据我记得,该函数将检查服务器的 session.save_path (使用 Ubuntu 和默认 PHP.ini 的 /var/lib/php/sessions )以查看文件是否仍然有效*并相应地报告......但我好像找不到那个函数。
有人可以帮我吗?
*我很欣赏 PHP 的垃圾收集还有很多不足之处
【问题讨论】:
-
使用数据库处理程序,而不是文件系统处理程序。然后,您可以使用您自己的 PHP 包装器机制来控制会话。
标签: php session session-state