1

我有以下设置: http://www.example.com/dir1/http://www.example.com/dir2/

每个虚拟目录都在 IIS6.0 上配置为具有自己的 AppPool 的应用程序。

使用 response.redirect 将经过身份验证的用户从 dir1 重定向到 dir2 时,我丢失了用户的身份验证信息,并且用户被重定向到登录页面。在子域下配置的每个应用程序(dir1 和 dir2)都没有出现此问题,例如: http://dir1.example.comhttp://dir2.example.com

我通过在 machine.config 文件中添加机器密钥解决了这个问题。

有人可以向我解释为什么它不适用于http://www.example.com/dir1配置吗?

4

2 回答 2

2

我经常以这种方式配置应用程序。有几个地方你可能会误入歧途。

  1. 每个 web.config 必须有一个通用 machineKey 部分的完全相同的副本。EG 生成一个部分并将其粘贴到您要与之共享 FormsTickets 的所有 web.configs 中。

  2. 每个 MembershipProvider(和 Roles/Profiles 等)元素必须共享相同的 applicationName 属性。默认情况下这是“/”,因此除非您手动更改它,否则应该没有问题。

  3. 所有应用程序中的所有提供程序都必须共享一个到公共 aspnetdb 实例的公共连接字符串。

  4. 如果您单独或逐步尝试了这些步骤中的任何一个,则数据库可能处于不一致状态。确保满足这些要求中的每一个并从新的数据库开始。

如果您按照这些步骤操作,您应该没有问题。这是一个相当常见且直接的用例。

如果您还有其他问题,请告诉我。

于 2010-05-05T16:46:08.683 回答
1

我不知道 ASP ,但我的猜测是您没有为正在使用的会话 cookie 指定路径,因此路径设置将默认为设置 cookie 的路径,/dir1/dir2

使用子域时,您可能将example.com其用作主 cookie 域,因此两个子域都可以访问它 = 没问题。

您应该能够通过检查浏览器中的会话 cookie 来发现这一点(例如,在 Firefox 的Web Developer Toolbar中的“Cookies”选项卡中)。

如果我是正确的,您将需要在/某处指定会话 cookie 的路径。

我不知道在什么时候进行微调,但也许它会为您指明正确的方向。

于 2010-05-03T17:32:25.843 回答