我在cookie.Expires中设置了过期时间,但取值的时候,Expires总为{1/1/1},但cookie的value却一直都存在。
下面是代码:
private void Button2_Click(object sender, System.EventArgs e)
{
HttpCookie cookie = new HttpCookie("log");
cookie.Values.Add("name", "me");
cookie.Values.Add("pwd", "123");
cookie.Expires = System.DateTime.MaxValue;
Response.Cookies.Add(cookie);//换成Response.Cookies.Set(cookie);或者Response.AppendCookie(cookie);也是一样,失效
}我在页面第二次PageLoad的时候加入断点,看到的结果是:
       名称                            值                          类型
---------------------------------------------------------------------------------
- Request.Cookies["log"] {System.Web.HttpCookie} System.Web.HttpCookie
+ Expires                    {1/1/1}                 System.DateTime
Value                  "name=me&pwd=123"        string有谁碰到过这样的问题吗?

解决方案 »

  1.   

    示例
    [Visual Basic, C#, JScript] 下面的示例将 Cookie 的过期时间设置为当前时间之后 10 分钟。
    [C#] 
    DateTime dt = DateTime.Now;
     TimeSpan ts = new TimeSpan(0,0,10,0);
     
     MyCookie.Expires = dt.Add(ts);
      

  2.   

    参考MVP 李红根的Blog关于Asp.net中Cookie的问题
    http://blog.csdn.net/lihonggen0/archive/2004/11/01/162402.aspx
      

  3.   

    代码如下首先是登录// 执行数据库验证代码略,假设成功
    // 加入Cookie的内容略,假设是string str
    HttpCookie cookie = new HttpCookie("MyCookie",str);
    cookie.Expires = DateTime.Now.AddMinutes(20); // 有效时间20分
    Response.Cookies.Add(cookie);
    Response.Redirect("..."); // 重定向
    然后是删除
    Response.Cookies.Remove("MyCookie");
    Response.Redirect("....") // 转向无论是添加Cookie还是移除,都不执行。请问解决方案。HttpCookie cookie = Request.Cookies[strKey];
    if(null == cookie)
    {
    //cookie不存在
    }
    先看看有没有写入客户端cookie=new HttpCookie("www.xx.org");
    cookie.Values.Add("UserType", ddlLoginType.SelectedItem.Value);
    cookie.Values.Add("UserName", tbUserName.Text.Trim());
    cookie.Values.Add("Password", tbPassword.Text.Trim());
    cookie.Values.Add("Access",i.ToString());
    Response.AppendCookie(cookie);
    //检查COOKIE是否已经写入浏览器
    cookie = Request.Cookies["www.xx.org"];
    if(cookie==null||cookie.ToString()=="")
    {
    //用session存储
    LoginUser loginUser = new LoginUser();
    loginUser.UserName = tbUserName.Text.Trim();
    loginUser.Password = tbPassword.Text.Trim();
    loginUser.UserType = ddlLoginType.SelectedItem.Value;
    loginUser.Access = i;
    Session["www.xx.org"] = loginUser;
    }
    >>>页面仅仅是刷新了一次if you debug, does the code get executed at all? by the way, are you doing any validation?>>>然后是删除>>>Response.Cookies.Remove("MyCookie");
    >>>Response.Redirect("....") // 转向you probably should set the cookie's Expires property to a time in the past
      

  4.   

    问题还没解决,现在用了两个页面,一个用于写COOKIE(webform1.aspx),一个用于读COOKIE(webform2.aspx)
    webform1.aspx中的主要代码:
    HttpCookie cookie = new HttpCookie("log");
    cookie.Values.Add("name", "me");
    cookie.Values.Add("pwd", "123");
    cookie.Expires = System.DateTime.MaxValue;
    RemoveCookie("log");//调用了下面写的函数
    Response.Cookies.Add(cookie);
    webform2.aspx中的主要代码:
    HttpCookie cookie = Request.Cookies["log"];
    if(cookie != null)
    Response.Write(cookie.Expires.ToString());
    webform2.aspx中的结果是:
    0001-1-1 0:00:00 
    其中用了李红根的函数(同时清空Request.Cookies和Response.Cookies中的相应cookie)
    public void RemoveCookie(string cookieName)
    {
    HttpCookie Cookie =  HttpContext.Current.Request.Cookies[cookieName];
    if (Cookie != null) 
    {
    //过期时间设置为立即过期        
    Cookie.Expires=  DateTime.Now; 
    HttpContext.Current.Request.Cookies.Remove(cookieName);
    }
    Cookie =  HttpContext.Current.Response.Cookies[cookieName];
    if (Cookie != null) 
    {
                    Cookie.Expires=  DateTime.Now; 
    HttpContext.Current.Response.Cookies.Remove(cookieName);
    }
    }
      

  5.   

    没明白goody9807() 帖的代码:(
      

  6.   

    都没有错,你只要加上Resopnse的过期时间就行了
    如下:
    Response.Expires=System.DateTime.MaxValue ;
    试试吧!
      

  7.   

    指定了Expires后 还要把cookies发送到客户端啊
      

  8.   

    TO: xiahouwen(活靶子.NET)
       加这个不就是把COOKIE送到客户端吗:
       Response.AppendCookie(cookie);
      

  9.   

    cookie.Expires = System.DateTime.MaxValue?
    这是什么时候过期?
    你试试
    cookie.Expires = System.DateTime.Now.AddDays(1);
      

  10.   

    TO: chjltjy(田佳烨) 
      Response.Expires的类型是int,Response.Expires=System.DateTime.MaxValue 这句会出错
      改成:
    Response.Expires=int.MaxValue;
    后,效果一样。
      

  11.   

    TO: brightheroes(闭关|那一剑的风情) 
       我试过这样:
    cookie.Expires = System.DateTime.Now.AddYears(10);
    以及这样:
    cookie.Expires = System.DateTime.Now;
    以及这样:
    cookie.Expires = System.DateTime.Now.AddDays(1);在取cookie的时候,得到的Expires都是Expires: 0001-1-1 0:00:0055555555555555555
      

  12.   

    TO:brightheroes(闭关|那一剑的风情)    cookie.Expires = System.DateTime.MaxValue;//这里表示把过期时间设置为DateTime类型的最大值,表示永不过期
      

  13.   

    cookies.Expires=DateTime.Now.AddDay(2);
      

  14.   

    给你一个js的
      function SetCookie (name,value,time) {
       
    var varTime
    if (time=="" || time==null){
    varTime=365 * 24 * 60 * 60 * 1000
    }else{
    varTime=time * 60 * 1000
    }
    var path
    var domain
    var secure
    var expires = new Date ();
    var base = new Date(0);
    var skew = base.getTime(); 
    if (skew > 0){  
    expires.setTime (expires.getTime() - skew);
    }
    expires.setTime (expires.getTime() + (varTime)); 
    document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
    }
    //////////////////////////////////////////////////////////////////////
    }
       }
      function GetCookie (name) 
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg){
    var endstr = document.cookie.indexOf (";", j);
    if (endstr == -1)
    endstr = document.cookie.length;
    return unescape(document.cookie.substring(j, endstr));
        }  
        i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
      }
    return null;
    }
      

  15.   

    我测试的结果:虽然取cookie.Expires的值总为{1/1/1},但是实际使用中没有影响,都是在设置的时间准时过期。
      

  16.   

    谢谢 renlily(lili) TO: huolx(飞云)
      我是不得不用这个时间进行判断,
    如果不用时间判断,而用存在性进行判断有问题。因为当把时间设置为小于当前时间后,cookie并没有马上被清除掉。那么用存在性判断就会不正确。
      

  17.   

    真是求人不如求已啊,终于搞定了。
    我认为,取过期时间,得到的始终为{1/1/1},这应该是ASP.NET的一个小BUG。解决方法是:将过期时间作为一个值保存在cookie中,如果cookie存在再去取这个过期时间,而不是直接取cookie.Expires。但写入cookie时,还是要写Expires的,这样才能在客户端正确地删除cookie。
    写入的代码:
    private void Button2_Click(object sender, System.EventArgs e)
    {
    HttpCookie cookie = new HttpCookie("log");
    cookie.Values.Add("name", "me");
    cookie.Values.Add("pwd", "123");
    cookie.Values.Add("Expires", DateTime.MaxValue.ToString());
    cookie.Expires = System.DateTime.MaxValue;
    Response.Cookies.Add(cookie);
    }读取时,
    HttpCookie cookie = Request.Cookies["log"];
    if(cookie != null)
    {
      if(DateTime.Parse(cookie.Values["Expires"]) > System.DateTime.Now) 
      {
        //do something...
      }
    }