使用 IIS 在 Windows 上迁移后 Zend 应用程序重定向不起作用

Zend Application Redirection Not Working After Migrated on Windows with IIS

我的应用程序是使用在 Linux 中运行良好的 Zend 1.11 开发的。根据要求,我将应用程序移动到具有 IIS 7、PHP 5.4.39、MSSQL Server 2012 的 Windows 7。

问题是提交登录凭据后,用户不会重定向到主页,而是停留在同一(登录)页面上。调试源代码后,我知道用户已成功从数据库中进行身份验证,但是在将用户重定向到索引控制器后,用户被发送回登录页面。即使 iis 日志未显示任何错误,应用程序也未显示任何错误。

我认为这可能是与 URL 重写相关的问题。因此,我在 IIS 上安装了“URL Rewrite”模块,并导入了 .htaccess 文件以获得等效的 URL 重写规则以添加到 web.config 文件中,但它也不起作用。

在我的应用程序中,会话被保存到数据库中。我无法将其更改为保存在服务器(文件)上,因为这是一个现有的应用程序。但是会话正在成功写入和读取 into/from 数据库。我唯一猜测会话在页面重定向时过期的原因。但不确定如何解决这个问题。

如有任何帮助,我们将不胜感激。

编辑

正在生成 Cookie,如下所示

我是否缺少 IIS 中 cookies/session 的配置?使用 IIS Web 服务器时,php.ini 中 Session 和 Cookie 的理想配置是什么?

当您的 cookie 无法识别时,重新重定向到登录页面是正确的行为。很可能在发出 cookie 时出现问题 - cookie 配置错误 domain/path(您需要 url 从 IIS 重写吗?)

解决根本原因的第一步是确定登录和重定向 header 是否存在并正确发送到浏览器。

您应该 sniff/capture http 流量以查看最终的 headers(使用 "Live HTTP Headers" 扩展 chrome/firefox)。您也可以在此处 post 相应登录 action/post 方法的 request/response header 示例。

序列应包含响应 header "Set-Cookie: PHPSESSID=........."。记下 cookie path/domain 的值。 以及像 "Location: /redirect/path".

这样的重定向 header

如果一切配置正确,所有后续请求都应包含请求 header "Cookie: PHPSESSID=....."。否则,您需要检查您的 IIS 配置(url rewrite/reverse for domain/path 以确保发布的 cookie 匹配未来的请求)。

要配置 IIS url rewrite/reverse 规则,请参阅 http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-20-configuration-reference#Setting_Response_Headers

调试源代码和 Web 引用后,我了解到实际问题是会话数据未被 PHP 引擎反序列化,这就是会话未正确构建的原因。因此,用户被重定向回登录页面。

因此,实际解决方案在

处提供