Apache模块开发:PHP会话访问

Apache模块开发:PHP会话访问,php,apache2,session-variables,session-state,apache-modules,Php,Apache2,Session Variables,Session State,Apache Modules,我正在尝试开发一个Apache2模块,该模块与其他函数一样,应该拦截某些POST变量,然后在下面建立一个PHP会话,设置所有相关的会话变量 我考虑过的一个选项是使用cookie库在请求中设置PHPSESSID,然后在$\u会话关联数组中插入所有这些值 问题是我似乎找不到PHP的API,而我对这些值实际上存在于Apache服务器本身之下的怀疑目前是没有根据的 有人知道这是否可能吗?或者,即使我忽略了一个简单的解决方法,也会奏效?我最终决定在Apache模块上编写一个PHP扩展和另一个处理程序,因为

我正在尝试开发一个Apache2模块,该模块与其他函数一样,应该拦截某些POST变量,然后在下面建立一个PHP会话,设置所有相关的会话变量

我考虑过的一个选项是使用cookie库在请求中设置PHPSESSID,然后在$\u会话关联数组中插入所有这些值

问题是我似乎找不到PHP的API,而我对这些值实际上存在于Apache服务器本身之下的怀疑目前是没有根据的


有人知道这是否可能吗?或者,即使我忽略了一个简单的解决方法,也会奏效?

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

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


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

我认为您需要编写一个PHP扩展,而不是一个Apache模块来完成您想要做的事情。如果您在请求的早期就钩住Apache,PHP还没有被调用,因此没有地方注入会话变量。如果您稍后在请求中挂接,PHP将已经执行(在FastCGI的情况下),您的Apache挂接很可能甚至不会运行。查看有关开发PHP扩展的信息。编写PHP扩展还意味着要为其他web处理系统(如CGI)编写代码,这在我的情况下并不妨碍。我不确定我是否理解,PHP扩展不应该真正关心什么样的服务器API在用于您想要做的事情。您只需为请求启动添加一个钩子,检查post变量,然后启动一个会话并将数据注入其中。抱歉,我正在编辑上一篇文章,但时间结束了。我的意思是,在这种情况下,开发一个扩展可能不是一个选项,尽管我可以尝试向“客户”推荐它。但是,如果我在PHP处理请求后钩住它,那将是一个好主意:我可以自己启动会话,填写属性,然后将cookie发送到客户端。正如您现在所建议的,但问题是,即使我解析POST变量,我也无法在以后将它们的值插入PHP会话。从技术上讲,请注意,PHP会话文件是以格式存储在服务器上的。会话文件可能属于运行服务器的用户,或者会话文件可能属于拥有
.php
文件的用户,因此您可能会遇到权限问题。在为特定会话文件调用
session\u start()
的请求期间,PHP还将锁定会话文件,因此您还需要担心文件锁定问题。您还需要知道会话文件存储的目录,并根据cookie识别用户的会话文件。