在PHP中实现自己的会话管理

时间:2009-07-20 07:28:40

标签: php session-management

在PHP中实现自己的会话管理有哪些选择?

有没有一种很好的方法来实现执行所有会话任务的组件? 如何构建一个在一个请求过程中接收HTTP请求和响应的类? 我只找到了“session_save_handler”选项,它似乎定义了存储处理程序。我需要的是替换整个会话管理。 有没有其他方式使用PHP配置或我是否必须实现我自己的控制器,它接收所有请求并调用我的会话管理?

感谢您的帮助

问候迈克尔

6 个答案:

答案 0 :(得分:3)

不,我很遗憾地说,没有界面可以将内置的“模块”切换到您自己的模块。有一些钩子(例如:session_save_handler(), set_error_handler()),不幸的是它。

$ _SESSION是一个'超级全球',如果您正在开展更大的项目,那么IMO不应该直接设置。那么最好使用负责处理会话的自定义类。将使代码更易于调试等。

答案 1 :(得分:1)

我不确定,你想要实现什么。看起来你想要从$ _SESSION变量中抽象出来,而不是想要改变存储空间。

看一下Zend或Solar框架处理Session访问的方式。

http://www.phpeveryday.com/articles/Zend-Framework-Session-Introduction-P571.html http://solarphp.org/manual:sessions

  

如何在一个请求过程中构建一个接收HTTP请求和响应的类?

我不知道,接收响应是什么意思,但框架有前/页控制器路由到所选操作,然后调用可以访问会话(读/写)和请求的方法(读取)对象并生成一个Response对象,然后通过模板呈现。

对于自动测试,您可以构建自己的Request和Session对象,并将它们传递给页面控制器。

答案 2 :(得分:1)

你自己在其中一条评论中说过。只需将$ _SESSION包装在一个类中。我不认为你可以替换它,但你当然可以建立自己的界面。

例如,你可以。构建一个首先构造的类,并在构造函数

中调用session_start()

答案 3 :(得分:0)

使用session_save_handler()功能可以处理会话信息的存储和检索方式。

默认情况下,PHP将会话信息存储在Web服务器某处的临时文件中。您可以使用session_save_handler()函数定义回调函数,您可以将此信息存储在数据库表中。

即使使用session_save_handler()函数处理具有自己定义函数的会话,您仍然可以使用超全局变量$ _SESSIONS访问信息。

答案 4 :(得分:0)

从php online manual查看此页面。有很多关于你的问题的有用信息。希望它有所帮助。

答案 5 :(得分:0)

您可以使用Cookie和数据库创建会话实现。您在客户端的计算机上设置了cookie。然后,您在数据库上运行查找,如下所示:

+--------+------+
| sessid | data |
+--------+------+

sessid包含对Cookie的引用(可能是md5SHA哈希的一个王),数据类似于JSON或{{1} } array。

功能:

您可以使用runkit_function_redefine()中的Runkit API功能来重新定义session_ xxxx 功能。
注意:Runkit是PECL的一部分。也就是说,没有与PHP捆绑在一起。您必须install it yourself

会话变量:

Serialized

简洁本身:只需将$_SESSION = &SessionClass->data; 作为对您数据的引用。