执行重定向到虚拟目录时,应用程序将失去身份验证

时间:2010-05-03 17:27:25

标签: asp.net iis-6 asp.net-membership forms-authentication virtual-directory

我有以下设置: 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配置吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

  5. 如果您按照这些步骤操作,则应该没有任何问题。这是一个相当普遍和直接的用例。

    如果您还有其他问题,请与我们联系。

答案 1 :(得分:1)

我不知道ASP,但我的猜测是你没有为你正在使用的会话cookie指定路径,所以路径设置将默认为cookie的设置路径,{{分别为1}}和/dir1

使用子域时,您可能使用/dir2作为主Cookie域,因此两个子域都可以访问它=没有问题。

您应该可以通过检查浏览器中的会话cookie来找到它(例如,在Firefox的Web Developer Toolbar中的“Cookies”标签中)。

如果我没错,您需要在某处指定example.com作为会话cookie的路径。

我不知道在哪个方面对此进行微调,但也许它会指向正确的方向。