首页新闻找找看学习计划

Cookie域问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-31 09:40

设置了Cookie的域为abc.com,在浏览器里查看,设置成功了,可以看到,但是,取Cookie值的时候就出问题了,Cookie值可以取到,但是cookie域一直是null,而且如果把过期时间改成2013年,再次查看,时间改了,但是浏览器里还能找到这个Cookie,请高手指教

 1         public void Delete(string key, string domain)
 2         {
 3             var cook = GetCookie(key);
 4             if (cook != null && cook.Domain == domain)
 5             {
 6                 cook.Expires = DateTime.Now.AddYears(-1);
 7                 this.httpContext.Response.Cookies.Add(cook);
 8             }
 9         }
10 
11 
12  public string Get(string key)
13         {
14             var cook = GetCookie(key);
15 
16             if (cook != null)
17                 return HttpUtility.UrlDecode(cook.Value);
18 
19             return null;
20         }
21 
22         /// <summary>
23         /// 
24         /// </summary>
25         /// <param name="key"></param>
26         /// <returns></returns>
27         HttpCookie GetCookie(string key)
28         {
29             return this.httpContext.Request.Cookies[key];
30         }
31 
32  public void Add(string key, string value, string domain, double expminute)
33         {
34             if (string.IsNullOrWhiteSpace(key))
35                 throw new ArgumentNullException("key");
36             if (string.IsNullOrWhiteSpace(value))
37                 throw new ArgumentNullException("value");
38 
39             var cookie = this.GetCookie(key);
40             if (cookie == null)
41                 cookie = new HttpCookie(key);
42 
43             lock (objLocker)
44             {
45                 cookie.Expires = DateTime.Now.AddMinutes(expminute <= 0 ? Variables.COOKIEMINUTE : expminute);
46                 if (!string.IsNullOrWhiteSpace(domain))
47                     cookie.Domain = domain;
48 
49                 cookie.Value = HttpUtility.UrlEncode(value);
50 
51                 this.httpContext.Response.Cookies.Add(cookie);
52             }
53         }

 

  

kingboy8808的主页 kingboy8808 | 初学一级 | 园豆:6
提问于:2014-07-31 09:15
< >
分享
最佳答案
0

代码看起来没问题。

注意以下几个细节:

1、cook.Domain == domain

这个Domain是统一小写或大写或大小写是匹配的?最好使用String.Equals不区分大小写的比较相等性

2、关于Cookie.Domain

这个是限制Cookie域的,输出时能正确的处理,但是获取就有问题。

浏览器的安全机制限制了,如果cookie的domain与当前访问的站点的cookie是不一致(不兼容)的话,是不会提交给服务器的。

所谓的一致,自然是完全相等(不区分大小写),所谓的兼容,是指子域站点能获取父域站点的cookie,但父域不能获取子域的站点。

关于子域与父域,包括站点中的虚拟站点、域名中的子域名等。

收获园豆:10
519740105 | 大侠五级 |园豆:5810 | 2014-08-07 10:42

虽然还没解决,还是谢谢

kingboy8808 | 园豆:6 (初学一级) | 2014-10-31 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册