【问题标题】:Apache Module development: PHP SESSION accessApache Module开发:PHP SESSION访问
【发布时间】: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


【解决方案1】:

我最终决定在我的 Apache 模块上与另一个处理程序一起编写一个 PHP 扩展,因为我更喜欢在那里解析一些 POST 变量。

模块将“咀嚼”需要保存到会话的数据,并将其作为新的 POST 变量传递,在对数据进行加密验证后。然后 PHP 扩展将启动一个新会话,并将每个项目设置为 Session 变量。

这假设我的模块将在 PHP 模块本身之前运行。万一这没有发生,我将不得不处理 PHP 上的验证,或者尝试以某种方式强制处理程序在 PHP 之前运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2016-07-05
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    相关资源
    最近更新 更多