环境:
WIN7 IIS7
.NET 4.0
伪静态生成COOKIES代码:
/// <summary>
/// 设置COOKIES,包括值,做用域,有效路径,过期时间,字全级别
/// </summary>
/// <param name="Cookie">COOKIES集合名称</param>
/// <param name="CookieItem">集合中元素名表,KEY为元素名,值为元素值</param>
public void SetCookies(string Cookie, Hashtable CookieItem)
{
HttpCookie Cookeis = new HttpCookie(Cookie);
foreach (DictionaryEntry de in CookieItem)
{
Cookeis[de.Key.ToString()] = HttpContext.Current.Server.UrlEncode(de.Value.ToString());
}
HttpContext.Current.Response.Cookies.Add(Cookeis);
}获取COOKIE
public object GetCookies(string cookies, string items)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookies];
if (cookie != null)
return HttpContext.Current.Server.UrlDecode(cookie.Values[items]);
return null;
}清除COOKIES (Request已试过) public void RemoveCookies(string Cookie)
{
HttpContext.Current.Response.Cookies[Cookie].Values.Clear();
HttpContext.Current.Response.Cookies[Cookie].Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.Cookies.Remove(Cookie);
}
问题:调用上面生成COOKIE的方法可以正常生成COOKIES
调用获取COOKIES的方法可以得到COOKIE
但是::
调用清除COOKIES的方法无法删除COOKIE
请教:如何才可能清除当前指定的COOKIES。
注:以前可以用,但是现在出现了问题,请问这个还会在哪里引起这样的错误?!
WIN7 IIS7
.NET 4.0
伪静态生成COOKIES代码:
/// <summary>
/// 设置COOKIES,包括值,做用域,有效路径,过期时间,字全级别
/// </summary>
/// <param name="Cookie">COOKIES集合名称</param>
/// <param name="CookieItem">集合中元素名表,KEY为元素名,值为元素值</param>
public void SetCookies(string Cookie, Hashtable CookieItem)
{
HttpCookie Cookeis = new HttpCookie(Cookie);
foreach (DictionaryEntry de in CookieItem)
{
Cookeis[de.Key.ToString()] = HttpContext.Current.Server.UrlEncode(de.Value.ToString());
}
HttpContext.Current.Response.Cookies.Add(Cookeis);
}获取COOKIE
public object GetCookies(string cookies, string items)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookies];
if (cookie != null)
return HttpContext.Current.Server.UrlDecode(cookie.Values[items]);
return null;
}清除COOKIES (Request已试过) public void RemoveCookies(string Cookie)
{
HttpContext.Current.Response.Cookies[Cookie].Values.Clear();
HttpContext.Current.Response.Cookies[Cookie].Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.Cookies.Remove(Cookie);
}
问题:调用上面生成COOKIE的方法可以正常生成COOKIES
调用获取COOKIES的方法可以得到COOKIE
但是::
调用清除COOKIES的方法无法删除COOKIE
请教:如何才可能清除当前指定的COOKIES。
注:以前可以用,但是现在出现了问题,请问这个还会在哪里引起这样的错误?!
解决方案 »
- 江湖救急啊~今天要交!!麻烦各位帮下小忙,真是急死了。。
- asp.net 正则表达式 问题
- datalist绑定字段如何转化?
- 请问在OleDbConnection关闭前,无论对数据库做的什么改动(比如用OleDbCommand)都不会反映在物理数据库上?
- 怎样知道repeter反复的次数?======================================
- 紧急求助!!!ASP.NET版本不匹配问题
- 拜求::DataGrid中分页中的编辑、删除功能的实现!!急急
- 求vb.net中 DataGrid 控件中的Delete程序!
- 刚学ADO.NET,编译问题?
- 怎么把webapplication打包成安装文件
- 问高手:隐藏源码有哪些途径
- 估计这问题有点难
public void RemoveCookies(string name)
{
HttpCookie cookie = new HttpCookie(name);
cookie.Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.AppendCookie(Cookie);
}
说明清楚cookies的代码没问题, 可以去其他地方找问题了.
HttpCookie cookie=....;
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie); //这步不要忘了
cook.Expires = DateTime.Now.AddDays(-1);
cook.Values.Clear();
System.Web.HttpContext.Current.Response.Cookies.Set(cook);注意最后一句
这一步是需要的吧
cook.Expires = DateTime.Now.AddDays(-1);
cook.Values.Clear();
System.Web.HttpContext.Current.Response.Cookies.Set(cook);
{
HttpContext.Current.Response.Cookies[Cookie].Values.Clear();
HttpContext.Current.Response.Cookies[Cookie].Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.Cookies.Remove(Cookie);
}Cookie存在于客户端是无法直接删除的,只能通过设置一个过期时间让它失效,然后通过浏览器的机制进行删除,楼主下面的写法其实并没有将Cookie的过期时间重写到客户端。可以用如下方法试试: public void RemoveCookies(string Cookie)
{
HttpContext.Current.Response.Cookies[Cookie].Values.Clear();
HttpContext.Current.Response.Cookies[Cookie].Expires = DateTime.Now.AddDays(-1000);//设置过期时间
HttpContext.Current.Response.Cookies.Add(Cookeis);//覆盖cookie
}
原来的:
public void RemoveCookies(string Cookie)
{
HttpContext.Current.Response.Cookies[Cookie].Values.Clear();
HttpContext.Current.Response.Cookies[Cookie].Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.Cookies.Remove(Cookie);
}
重写成如下 HttpCookie curCookie = Request.Cookies[Cookie];
curCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(curCookie);
这种方法早已经试过.
刚才我又断点看了一下,在清除COOKIE的时候,可以获取COOKIE内容,但是设置过期后,以及从从集合中移除都不起作用,即使设置了过期,再看COOKIES的时候,根本没有什么变化.不过COOKIE的过期日期竟然是0001/01/01也就是看上去清除的COOKIE和获取到的竟不是同一个,是呼这个COOKIE被什么东西给隔离了
把Cookie的过期时间写成负的,浏览器会自动删除的
-------------------------
从楼主的这句话,就可以推定楼主在使用Cookie时存在误区,像下面的代码,会自动创建Cookie的:
HttpCookie cookie = Response.Cookies["Cookie"];它会创建一个过期时间是0001-1-1 0:00:00。楼主读Cookie的时候,应该从Request.Cookies中获取,Response.Cookies是发送给客户端的。
public void RemoveCookies(string name)
{
HttpContext.Current.Request.Cookies.Remove(name);HttpCookie cookie = new HttpCookie(name);
cookie.Expires = DateTime.Now.AddDays(-1000);
HttpContext.Current.Response.AppendCookie(Cookie);
}
几天过去了,问题依旧.
如果说COOKIE使用不正确,请问您写一个正确的出来,不要说MSDN,那上面的要是能使用通过我就不来问了!
1Cookie cookie = new Cookie("key", "value");
2cookie.setMaxAge(60); //设置60秒生存期,假如设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。
3cookie.setPath("/test/test2"); //设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.XML里配置的该Servlet的url-pattern路径部分)
4response.addCookie(cookie);
2.读取Cookie
11//该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,假如没有任何Cookie的话,则返回null
22Cookie[] cookies = request.getCookies();
3.删除Cookie
1Cookie cookie = new Cookie("key", null);
2cookie.setMaxAge(0); //设置为0为立即删除该Cookie
3cookie.setPath("/test/test2"); //删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
4response.addCookie(cookie);
4.注重:假设路径结构如下
/
/test
/test/test2
/test345
/test555/test666
a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。
b. 删除时,假如当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)
FF.必须指定与设定cookie时使用的相同路径来删除改cookie,而且cookie的键名不论大写、小写或大小混合都要指定路径。
IE.键名小写时,假如当前路径为/test/test2,假如找不到再向上查询/test、/test555、/test345,假如还找不到就查询/ 。(/test555/test666不查询)
键名大小写混合或大写时,不指定路径则默认删除当前路径,并且不向上查询。
c.读取Cookie时只能读取直接父路径的Cookie。
假如当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/
d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来治理不同的Web Application,这样对于每个Context有不同的Path,
在一个Server中有多个Web Application时要非凡小心,不要设置Path为/的Cookie,轻易误操作。(当然前提是域名相同)
HttpCookie myCookie = Request.Cookies["CNLClubOperatorRoles"];
if (myCookie != null || myCookie.Value != "")
{
myCookie.Value = null;
Response.Cookies.Add(myCookie);
}
你可以把Cookie设为null值
也可以
HttpCookie myCookie = Request.Cookies["CNLClubOperatorRoles"];
if (myCookie != null || myCookie.Value != "")
{
myCookie.Expires = DateTime.Now.AddDays(-31);
Response.Cookies.Add(myCookie);
}
把Cookie设置过期时间