【问题标题】:PHP check if session is still validPHP检查会话是否仍然有效
【发布时间】: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


【解决方案1】:

是的,有这样的功能来检查会话状态是否处于活动状态、禁用或不存在

session_status()

此函数将值返回为

  • 如果会话被禁用,则 PHP_SESSION_DISABLED。
  • PHP_SESSION_NONE 如果会话已启用,但不存在。
  • PHP_SESSION_ACTIVE 如果会话已启用且存在一个。

有关此功能的更多详细信息Click Here

【讨论】:

  • 你如何传递会话值? session_status() 不带任何参数。请记住,我正在从数据库中提取会话值,并且需要确定它是否仍然有效。我没有检查当前会话
  • 它在不活动时返回 false,在活动时返回 true,因此您可以将条件设​​置为 if(session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE)
  • 如果为真则表示会话处于活动状态。
  • 请记住,我正在从数据库中提取会话值,并且需要确定它是否仍然有效。我没有检查当前会话
  • 是的,在获得 session_id() 后,您可以检查它的状态。
猜你喜欢
  • 2019-08-02
  • 2014-05-02
  • 2018-06-30
  • 1970-01-01
  • 2016-04-18
  • 2016-06-28
  • 2013-06-24
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多