Asp.net MVC3 Cookie在刷新或访问第二页后才包含在请求中

Asp.net MVC3 Cookie在刷新或访问第二页后才包含在请求中,asp.net,cookies,Asp.net,Cookies,背景: 我正在使用两个MVC3网站进行混合模式身份验证。我正在Site1中使用windows身份验证对某人进行身份验证,然后将此人转发到使用表单身份验证的Site2。我的解决方案是在用户通过windows auth进行身份验证后,在site1中收集用户信息。然后我会将这些信息写入cookie,然后重定向到站点2。然后,站点2将使用cookie中找到的信息,使用Forms Auth自动登录用户。两个应用程序都在同一个域中,应该能够共享cookie,但是在页面刷新或单击站点中的链接(访问第二个页面)

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

不管怎样,这是我的问题。我创建cookie,然后将用户从Site1转发到Site2

...{cookie created here and added to response}...
HttpContext.Response.Redirect("http://site2.mydomain.com")
当我这样做时,请求中没有cookie。然而,一旦进入Site2的主页,我就可以点击refresh,然后我的cookie就成为请求的一部分,我的身份验证就可以工作了

我需要我的响应将cookie写入客户端,然后将cookie添加到请求中,但在使用响应时,它似乎跳过了这一点。重定向

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

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


我可以使用javascript来完成这项工作吗?javascript是否可以检查特定名称的cookie响应,并在找到响应时重定向到当前页面

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


但这并不理想。能否将cookie信息放入一次性验证URL的查询字符串中,然后存储一个新cookie并重定向到Site2的主页?

也许在响应返回cookie后,我需要执行客户端重定向?在不添加注释的情况下对我的问题进行向下投票有什么意义?我很乐意“非理想”解决方案,因为Site1仅适用于本地用户。我可以在查询字符串中放入一些会导致刷新的内容,但我还没有弄清楚如何导致刷新。也许客户端上的“运行一次”脚本会强制刷新???如果Site1用于本地用户,我推荐我的第二种方法,即用查询字符串(即:)替换cookie。当检测到查询字符串时,执行与cookie相同的身份验证步骤。完成登录步骤后,进行响应。重定向到Site2页面(Response.Redirect(“))我将尝试您的解决方案,或它的一些变体。这让我开始了另一个思考过程。我将标记接受您的答案,并在完成后用我的最终解决方案更新我的问题。我也给了您奖金!谢谢。