有哪些选项可以在 PHP 中实现自己的会话管理?
有没有一种很好的方法来实现一个执行所有会话任务的组件?如何构造一个在一个请求过程中接收 HTTP 请求和响应的类?我只找到了似乎定义存储处理程序的选项“session_save_handler”。我需要的是替换整个会话管理。是否有另一种使用 PHP 配置的方法,或者我是否必须实现自己的控制器来接收所有请求并调用我的会话管理?
谢谢你的帮助
问候迈克尔
有哪些选项可以在 PHP 中实现自己的会话管理?
有没有一种很好的方法来实现一个执行所有会话任务的组件?如何构造一个在一个请求过程中接收 HTTP 请求和响应的类?我只找到了似乎定义存储处理程序的选项“session_save_handler”。我需要的是替换整个会话管理。是否有另一种使用 PHP 配置的方法,或者我是否必须实现自己的控制器来接收所有请求并调用我的会话管理?
谢谢你的帮助
问候迈克尔
不,很抱歉,没有将内置“模块”切换为您自己的界面。有一些钩子(例如:)session_save_handler(), set_error_handler()
,不幸的是。
$_SESSION 是一个“超级全球”,如果您正在从事更大的项目,则不应直接设置 IMO。那么最好使用一个负责处理会话的自定义类。将使代码更易于调试等。
我不确定,你想要实现什么。您似乎更想从 $_SESSION 变量中抽象出来,而不是您想更改存储。
看一下 Zend 或 Solar 框架处理 Session 访问的方式。
http://www.phpeveryday.com/articles/Zend-Framework-Session-Introduction-P571.html http://solarphp.org/manual:sessions
如何构造一个在一个请求过程中接收 HTTP 请求和响应的类?
我不知道,接收响应是什么意思,但是框架有前端/页面控制器,它们路由到所选操作,然后调用可以访问会话(读/写)和请求(读)的方法对象并生成一个响应对象,然后通过模板呈现该对象。
对于自动测试,您可以构建自己的 Request 和 Session 对象并将它们传递给页面控制器。
你在其中一个评论中自己说过。只需将 $_SESSION 包装在一个类中即可。我不认为你可以替换它,但你当然可以为它构建自己的界面。
例如,你可以。构建一个首先构建的类并在构造函数中调用 session_start()
使用该session_save_handler()
函数可以处理会话信息的存储和检索方式。
默认情况下,PHP 将会话信息存储在位于 Web 服务器某处的临时文件中。session_save_handler()
您可以使用可以将此信息存储在数据库表中的函数来定义回调函数。
即使您使用自己定义的函数处理会话,您session_save_handler()
仍然可以使用超全局变量 $_SESSIONS 访问信息。
从 php在线手册中查看此页面。关于您的问题有很多有用的信息。希望能帮助到你。
您可以使用 cookie 和数据库创建会话实现。您在客户端机器上设置了一个 cookie。然后,您在数据库上运行查找,如下所示:
+--------+------+
| sessid | data |
+--------+------+
wheresessid
包含对 cookie 的引用(可能是一些国王md5
或SHA
哈希),并且数据类似于一个JSON
或Serialized
数组。
您可以使用Runkit_function_redefine()函数(它是 Runkit API 的一部分)来重新定义 session_xxxx函数。
注意:Runkit 是 PECL 的一部分。也就是说,不与 PHP 捆绑。您必须自己安装它。
$_SESSION = &SessionClass->data;
简单本身:只是$_SESSION
作为您的数据的参考。