将PHP会话变量分隔到自己的文件中

时间:2015-04-01 14:41:39

标签: php ajax session session-variables

我正在考虑编写一个会话处理程序(使用session_set_save_handler),它将每个会话变量存储在它自己的文件中。也许我将session_id作为目录,并将每个变量存储在自己的文件中,并使用会话密钥作为文件名。

我的目的是:

  • 非阻止(或阻塞较少)会话。即当您运行打开会话的脚本时,您不必在另一个脚本可以写入会话之前关闭会话。我认为会话处理程序可以快速打开和关闭单个文件以进行写访问(读访问是可以的,因为您可以关闭会话并仍然使用$ _SESSION访问这些值)。所以基本上写入任何给定的会话变量,脚本不需要锁定整个会话。
  • 应用程序已经非常重要(它是生物学研究实验室的中央数据库)因此我不想通过将用户的会话存储在数据库中来增加数据库的负担。数据库(虽然这是另一种选择,甚至可能为会话设置一个额外的数据库?)。由于用户的表单输入使用ajax保存到会话中(在更改时,用于持久性),并且可以存在任何给定表单的多个实例,因此会话使用得相当多。
  • 在没有过度锁定的情况下对会话构建垃圾收集/到期例程

有没有人对这样存储会话有意见?这是个好主意吗?不好主意?

1 个答案:

答案 0 :(得分:1)

我建议你不要自己写一些东西,然后实施一个已经过试验和测试的解决方案。

以下解决方案符合您在问题中列出的标准:

http://silex.sensiolabs.org/doc/cookbook/session_storage.html

我建议如果您的应用程序已经像您所说的那样已经非常重要,那么您创建一个单独的数据库纯粹用于存储和阅读已经确认的会话。

为了设置,您必须下载使用Symfony2组件的Silex。我建议在您的网站上设置Silex的最佳方法是使用Composer。为简洁起见,我不会介绍如何安装和设置Composer,因为有很多关于如何执行此操作的有用文章。

你不必使用Silex附带的所有东西,但如果你选择沿着这条路走下去,那么使用Silex类库也可能对其他用途有用。

有关设置Silex的说明,请访问以下位置:

http://silex.sensiolabs.org/doc/usage.html

以下链接提供了有关配置会话的更多信息以及有关如何使用它们的示例,但是在页面上提到使用文件存储,您可以忽略与文件存储相关的任何内容:

http://silex.sensiolabs.org/doc/providers/session.html

尽管满足了您指定的要求,但如果建议的解决方案不是您要考虑的,请解释原因,并且我会在需要时提供额外的帮助和支持。