当前位置:编程学习 > C#/ASP.NET >>

Response.Redirect后Cookie丢失了

我的这个流程是这样的,有点复杂:
1. 客户打开我们的一个url
2. 在这个url的后台调用httpwebrequest到一个认证程序来认证,认证程序会换回一个加密后的cookie
3. 把这个cookie加入到Response.cookies里
4. 调用Response.Redirect到一个新的页面,这个页面会根据那个加密的cookie来判断用户是否已通过认证

现在的问题是第3步加入的cookie在那个新的页面里取不到,感觉没传过来。cookie没有设置过期日期。


HttpWebRequest req = (HttpWebRequest)WebRequest.Create(authenticatelink);
req.Method = ...;
var res = (HttpWebResponse)req.GetResponse();
foreach (Cookie ck in res.Cookies)
{
       HttpCookie cookie = new HttpCookie(ck.Name)
       {
            Value = ck.Value,
            Domain = ck.Domain,
            Expires = ck.Expires,
            Path = ck.Path,
            Secure = true
       };
       Response.Cookies.Add(cookie);
}
Response.Redirect(newurl);
Redirect  Coolie --------------------编程问答--------------------
引用 楼主 xsplus 的回复:
我的这个流程是这样的,有点复杂:
1. 客户打开我们的一个url
2. 在这个url的后台调用httpwebrequest到一个认证程序来认证,认证程序会换回一个加密后的cookie
3. 把这个cookie加入到Response.cookies里
4. 调用Response.Redirect到一个新的页面,这个页面会根据那个加密的cookie来判断用户是否已通过……

你断点看看,看看有没有保存Cookie --------------------编程问答-------------------- 能跟踪到这个值吗?
var res = (HttpWebResponse)req.GetResponse(); --------------------编程问答-------------------- 在执行Response.Redirect(newurl)前,我看过了,response里有新添加的cookie --------------------编程问答-------------------- @jason_dct
可以 --------------------编程问答-------------------- 你这个程序存在几个可能的问题:
1、认证程序返回的cookie的Domain必须要和newurl的Domain匹配
2、当前程序的Domain也要和newurl的Domain匹配
也就是说3者的Domain必须是匹配的,因为你返回后的cookie是存在当前response里面的,Redirect到目标地址必须是相同Domain才能获取到你保存的cookie。
不知道说明白没有。

3、你向response中添加cookie后,必须要这次响应回客户端,然后客户端再次发起访问,这个cookie才会生效。但Redirect跳转也是需要响应到客户端后然后再跳转的,但我不确定它是否带上了新的cookie。你可以用浏览器的开发人员工具查看一下。 --------------------编程问答-------------------- 当asp.net 执行 Response.Redirect 时会强制终止当前Response ,不发送当前页面的cookie 给浏览器,而是发送一个指令告诉浏览器重新发送一个新的HTTP请求到新的URL,结果导致当前的cookie丢失

-------
参考 --------------------编程问答--------------------
引用 6 楼 dr592112441 的回复:
当asp.net 执行 Response.Redirect 时会强制终止当前Response ,不发送当前页面的cookie 给浏览器,而是发送一个指令告诉浏览器重新发送一个新的HTTP请求到新的URL,结果导致当前的cookie丢失

-------
参考
这个哥们这个应该可以看下 --------------------编程问答-------------------- 好东西,学习一下 --------------------编程问答-------------------- 按照上面说的原因,我想了一个方法,就是不用response.redirect来重定向新页面,而是response.write一段代码,在这段代码里让javascript来重定向。可是还是不行
--------------------编程问答-------------------- Response.Write("<script language=\"javascript\">alert('gdrgr');location.href='xxxx.aspx';</script>");
这样不行?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,