【发布时间】:2012-08-11 19:24:50
【问题描述】:
我正在尝试开发一个 Apache 2 模块,除其他功能外,它应该拦截某些 POST 变量,然后在下面建立一个 PHP 会话,设置所有相关的会话变量。
我考虑过的一个选项是使用 cookie 库在请求中设置 PHPSESSID,然后将所有这些值插入到 $_SESSION 关联数组中。
问题是我似乎找不到 PHP 的 API,我怀疑这些值实际上位于 Apache 服务器本身的底层,目前是没有根据的。
有谁知道这是否可能?或者即使我忽略了一个可行的简单解决方法?
【问题讨论】:
-
我认为你需要编写一个 PHP 扩展而不是 Apache 模块来完成你想做的事情。如果您在请求的早期挂钩到 Apache,则尚未调用 PHP,因此没有地方可以注入会话变量。如果您稍后在请求中挂钩,PHP 将已经执行(并且在 FastCGI 的情况下)您的 Apache 挂钩很可能甚至不会运行。查看PHP at the Core 了解有关开发 PHP 扩展的信息。
-
编写 PHP 扩展意味着还要为其他 Web 处理系统(如 CGI)编写代码,虽然在我的情况下尤其不妨碍,但 .
-
我不确定我是否理解,PHP 扩展不应该真正关心正在使用的服务器 API 听起来像是你想做的事情。您只需为请求启动添加一个钩子,检查您的帖子变量,然后启动一个会话并将数据注入其中。
-
对不起,我正在编辑上一篇文章,但时间已过期。我的意思是在这种情况下开发扩展可能不是一种选择,尽管我可以尝试向“客户”建议它。但是,如果我在 PHP 处理后钩住请求,那将是一件好事:我可以自己启动会话,填写属性,然后将 cookie 发送到客户端。就像你现在建议的那样,但问题是,即使我解析了 POST 变量,之后我也无法将它们的值插入到 PHP 会话中。
-
从技术上讲,只需注意 PHP 会话文件以 serialized 格式存储在服务器上。会话文件可能归运行服务器的用户所有,或者会话文件可能归拥有
.php文件的用户所有,因此您可能会遇到权限问题。 PHP 还将在为特定会话文件调用session_start()的请求期间锁定会话文件,因此您也需要担心文件锁定问题。您还需要知道存储会话文件的目录,并根据 cookie 识别用户的会话文件。
标签: php apache2 session-variables session-state apache-modules