socket服务中的php会话管理

时间:2013-07-01 08:54:13

标签: php api session

我正在考虑在PHP中构建一个保存用户凭据信息的安全服务,其中最重要的是登录用户的令牌。这个服务可以通过某种API(REST,SOAP,等等)通过另一个API访问(外部用户通过网站API连接,该API检查另一个API中的凭据 - 我们现在正在考虑的那个)。

有可能在RDBMS中存储令牌(和其他信息)。但是这个解决方案对我来说似乎并不干净(令牌将保留在数据库中,即使它们已经过期,我也必须实施一种机制来清除过期的会话等)。我正在考虑使用本机PHP会话管理($_SESSION)。那可能吗?有没有人有做这些事情的经验?

我想到了以下问题:

  • 当在www服务器上部署基于PHP的网站时,用户通过浏览器访问URL,并使用浏览器cookie创建其本地会话。如果有一个网页API可以连接到安全API,那么一直只有一个会话对象吗?它是可配置的吗?
  • 创建会话的精确程度以及如何影响机制(例如不以cookie为基础)?

1 个答案:

答案 0 :(得分:1)

我的建议是使用数据库。

首先让我解释一下会议的一般概念。会话可以被视为服务器端cookie。 $ _SESSION变量存储的位置由PHP的session.save_path配置决定。通常这是Linux / Unix系统上的/ tmp。会话具有与其关联的客户端的会话参数。当发出session_start或类似的东西时,服务器将根据客户端提供的session-parameter检索文件/会话。由于这些只是存储文件,因此服务器可以读取其他客户端的会话。

这让我想到你描述的第二个问题。如果我是正确的,你想要一些关于某个用户的会话的api请求信息。基于第一段,您希望了解会话的目的不是将其用作某种全局存储。当然有可能。您可以让外部API包含session-parameter,或者您可以手动读取会话文件,但对我来说这些似乎是脏修复。它不是为会话构建的。

吸引您使用会话的唯一另一件事是会话的自动超时。但是,这个简单的逻辑可以在使用数据库时轻松实现。您应该做的是在数据库中注册用户上次活动的时间。当API请求用户的数据时,您只需检查当前时间 - 最后一个活动时间是否低于某个阈值。如果不是这种情况,则会话已过期,同时您可以从表中删除会话。这与会话内部使用的或多或少相同的一般方法,它不需要常规的cronjobs(尽管它们仍然可以用于清理数据库)以删除会话。

所以不要害怕使用数据库来存储数据,毕竟它们是构建(和优化)以完成那些事情。