在刷新或访问第二页之前,MVC3 Cookie不包含在请求中

时间:2011-09-30 13:01:59

标签: asp.net cookies

背景: 我正在使用两个MVC3网站进行混合模式身份验证。我正在使用Site1中的Windows身份验证对一个人进行身份验证,然后将该人转发到使用Forms身份验证的Site2上。我的解决方案是在用户通过Windows身份验证进行身份验证后,在site1中收集用户信息。然后我会将此信息写入cookie,然后重定向到站点2.然后,站点2将使用cookie中找到的信息使用Forms Auth自动登录用户。这两个应用程序都在同一个域中,并且应该能够共享cookie,但是在重定向之后cookie不可用,直到刷新页面或单击站点中的链接(访问第2页)。

无论如何,这是我的问题。我创建了cookie,然后将用户从Site1转发到Site2。

...{cookie created here and added to response}...
HttpContext.Response.Redirect("http://site2.mydomain.com")

当我这样做时,请求中没有cookie。但是,一旦在Site2的主页上,我可以点击刷新,然后我的cookie是请求的一部分,我的身份验证工作。

我需要我的响应将cookie写入客户端,然后在请求中添加该cookie,但似乎在使用Response.Redirect时跳过这个...

更新 我已经读过,在请求发出之前cookie存在时,请求只包含cookie。由于我正在将cookie写入请求的响应中,因此只有后续请求才会包含cookie。所以,我需要的是一种强制第二个请求的方法,一旦他们从初始请求得到我的响应。所以......

用户发送请求--->响应返回cookie --->强制另一个请求(应该包含cookie)--->返回请求页面。

我可以使用javascript执行此操作吗? javascript可以检查某个名称的cookie的响应,一旦找到,会导致重定向到当前页面吗?

1 个答案:

答案 0 :(得分:1)

如果你必须强制刷新以获得第二个请求,你可以在Site1的重定向HttpContext.Response.Redirect(“http://site2.mydomain.com?refresh=1”)中附加一个Query String参数,然后在Site2中,导致重定向到同一页面sans查询字符串参数。

虽然这不是很理想。您是否可以将该cookie信息放入查询字符串中,以获得一次性身份验证URL,然后存储新cookie并重定向到Site2的主页?