我在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有谁碰到过这样的问题吗?
下面是代码:
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有谁碰到过这样的问题吗?
[Visual Basic, C#, JScript] 下面的示例将 Cookie 的过期时间设置为当前时间之后 10 分钟。
[C#]
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(0,0,10,0);
MyCookie.Expires = dt.Add(ts);
http://blog.csdn.net/lihonggen0/archive/2004/11/01/162402.aspx
// 加入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
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);
}
}
如下:
Response.Expires=System.DateTime.MaxValue ;
试试吧!
加这个不就是把COOKIE送到客户端吗:
Response.AppendCookie(cookie);
这是什么时候过期?
你试试
cookie.Expires = System.DateTime.Now.AddDays(1);
Response.Expires的类型是int,Response.Expires=System.DateTime.MaxValue 这句会出错
改成:
Response.Expires=int.MaxValue;
后,效果一样。
我试过这样:
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
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;
}
我是不得不用这个时间进行判断,
如果不用时间判断,而用存在性进行判断有问题。因为当把时间设置为小于当前时间后,cookie并没有马上被清除掉。那么用存在性判断就会不正确。
我认为,取过期时间,得到的始终为{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...
}
}