我有以下设置: http://www.example.com/dir1/和 http://www.example.com/dir2/
每个虚拟目录在IIS6.0上配置为具有自己的AppPool的应用程序。
使用response.redirect将经过身份验证的用户从dir1重定向到dir2时,我丢失了用户的身份验证信息,并且用户被重定向到登录页面。每个应用程序(dir1和dir2)都是在子域下配置的,这个问题不会出现,例如: http://dir1.example.com和http://dir2.example.com。
我已通过向machine.config文件添加计算机密钥解决了该问题。
有人可以向我解释为什么它不能用于http://www.example.com/dir1配置吗?
答案 0 :(得分:2)
我经常以这种方式配置应用程序。有几个地方你可以误入歧途。
每个web.config必须与公共machineKey部分完全相同。例如。生成一个部分并将其粘贴到您要与之共享FormsTickets的所有web.configs中。
每个MembershipProvider(和Roles / Profiles等)元素必须共享相同的applicationName属性。默认情况下这是'/',所以除非您手动更改它,否则应该没有问题。
所有应用程序中的所有提供程序必须共享公共连接字符串到公共aspnetdb实例。
如果您单独或逐步尝试了这些步骤,则可能是DB处于不一致状态。确保满足每个要求并从新数据库开始。
如果您按照这些步骤操作,则应该没有任何问题。这是一个相当普遍和直接的用例。
如果您还有其他问题,请与我们联系。
答案 1 :(得分:1)
我不知道ASP,但我的猜测是你没有为你正在使用的会话cookie指定路径,所以路径设置将默认为cookie的设置路径,{{分别为1}}和/dir1
。
使用子域时,您可能使用/dir2
作为主Cookie域,因此两个子域都可以访问它=没有问题。
您应该可以通过检查浏览器中的会话cookie来找到它(例如,在Firefox的Web Developer Toolbar中的“Cookies”标签中)。
如果我没错,您需要在某处指定example.com
作为会话cookie的路径。
我不知道在哪个方面对此进行微调,但也许它会指向正确的方向。