为什么我的Cookie只能更新一个键值?

实在是想不到问题的所在了
//这个是来写/更新cookie的某一个键的
public static void WriteCookies(string key, string value)
    {
        if (value != null)
            value = HttpUtility.UrlEncode(value, Encoding.Default);
        HttpCookie cookie1 = HttpContext.Current.Request.Cookies[_cookie_name];
        if (cookie1 == null)
        {
            cookie1 = new HttpCookie(_cookie_name);
            cookie1.Values.Add(key, value);
            cookie1.Expires = DateTime.Now.AddYears(1);
            cookie1.Domain = Function.getModule().CookieDomain;
            HttpContext.Current.Response.Cookies.Add(cookie1);
            return;
        }
        cookie1.Values[key] = value;
        cookie1.Expires = DateTime.Now.AddYears(1);
        cookie1.Domain = Function.getModule().CookieDomain;
        HttpContext.Current.Response.Cookies.Set(cookie1);
    }
//这是得到当前cookie一个键的值
    public static string GetCookisValue(string key)
    {
        HttpCookie myCookie = HttpContext.Current.Request.Cookies[_cookie_name];
        if (myCookie != null)
        {
            if (myCookie.Values[key] != null)
                return HttpUtility.UrlDecode(myCookie.Values[key].ToString(),Encoding.Default);
            return "";
        }
        return "";
       
    }

调用该方法:
global.WriteCookies("Name", _txt_username.Text.Trim());
global.WriteCookies("Url", _homepage);

每次只更新了Url,却没有更新Name
跟踪时出现的怪现象是:
跟踪到第一个WriteCookies("Name","");时,更新正常,此时Name已被更新
跟踪到下一个WriteCookies("Url"......);时,却发现更新过的name键又还原了

这是当前页面的cookie

AJSTAT_ok_pages
AJSTAT_ok_times
CommentUser
Name=12345
Url=http%3a%2f%2fwww.123456c78.com
ASP.NET_SessionId

Name一直死活改不了,URl倒是可以更新

怪在调用同一方法,为什么只能更新第二个键?
请大家帮解一下

11 Responses

  1. hubro November 22 2006 , 10:10
    新增的COOKIE不能马上取到
    #1
  2. 幻想曲 November 22 2006 , 10:12
    幻想曲
    现在一个现象:
    global.WriteCookies("Name", _txt_username.Text.Trim());
    global.WriteCookies("Url", _homepage);
    这样的时候,Url可以更新,但Name更新不了,
    交换一下位置,
    global.WriteCookies("Url", _homepage);
    global.WriteCookies("Name", _txt_username.Text.Trim());
    Name更新了,而Url更新不了,好像最后写的cookie会覆盖最开始写的...
    #2
  3. hubro November 22 2006 , 10:49
    cookie[key]==null不等于cookie[key][key]==null
    #3
  4. hubro November 22 2006 , 10:50
    说反了
    cookie[key][key]==null不等于cookie[key]==null
    #4
  5. 幻想曲 November 22 2006 , 11:34
    幻想曲
    [code]
    
    public static void WriteCookies(string key, string value)
    {
    if (value != null)
    value = HttpUtility.UrlEncode(value, Encoding.Default);
    HttpCookie cookie1 = HttpContext.Current.Request.Cookies[_cookie_name];
    if (cookie1 == null)
    {
    cookie1 = new HttpCookie(_cookie_name);
    cookie1.Values.Add(key, value);
    cookie1.Expires = DateTime.Now.AddYears(1);
    cookie1.Domain = Function.getModule().CookieDomain;
    HttpContext.Current.Response.Cookies.Add(cookie1);

    return;
    }
    if (cookie1.Values[key] == null)
    {
    cookie1.Values.Add(key, value);
    }
    else
    cookie1.Values[key] = value;
    cookie1.Expires = DateTime.Now.AddYears(1);
    cookie1.Domain = Function.getModule().CookieDomain;
    HttpContext.Current.Response.SetCookie(cookie1);
    return;
    }
    [/code]

    这样也不行哇~~
    #5
  6. notus November 22 2006 , 14:40
    ASP.NET 包含两个内部 Cookie 集合。通过 HttpRequest 的 Cookies 集合访问的集合包含以 Cookie 标头形式由客户端传输到服务器的 Cookie。通过 HttpResponse 的 Cookies 集合访问的集合包含一些新 Cookie,这些 Cookie 在服务器上创建并以 Set-Cookie 标头的形式传输到客户端。

    你把程序换一下
    WriteCookies()
    // HttpCookie cookie1 = HttpContext.Current.Request.Cookies [_cookie_name];
    HttpCookie cookie1 = HttpContext.Current.Response.Cookies [_cookie_name];

    GetCookisValue()
    // HttpCookie myCookie = HttpContext.Current.Request.Cookies [_cookie_name];
    HttpCookie myCookie = HttpContext.Current.Response.Cookies [_cookie_name];

    通过调试发现,你只能暂时改变从客户端获得的cookie,当退出WriteCookies()后,会自动回到以前的状态 :)
    换response的,问题就可以了
    #6
  7. 幻想曲 November 22 2006 , 15:01
    幻想曲
    Notus出马
    还有啥不能解决的~~
    #7
  8. 幻想曲 November 22 2006 , 15:02
    幻想曲
    不过照Notus的全改成Response我这反而一个都读不到
    把GetCookiesValue中还原成Request就OK了~
    不过最终没有找到根源..
    #8
  9. 笑疯 November 22 2006 , 21:13
    笑疯
    我在以前的项目中也出现过这种情况,好奇怪,后来没有办法换成SESSION了
    #9
  10. 幻想曲 November 22 2006 , 21:29
    幻想曲
    只能说明我们对.Net本身的内部机制不是很清楚哇
    #10
  11. xx November 24 2006 , 10:22
    xx
    取得用Request
    写入用Response
    不管是新增还是修改,一律往Response中Add
    #11

Write a comment:



(Will show your Gravatar icon)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

申请链接请看这里