来自:http://blog.csdn.net/porschev/article/details/6408543
最近在做一个 SSO(Single Sign On),用cookies去存Token
网站保存用户信息这类都用的cookies
以前觉得cookies操作无非就那么几种,但是“杯具事件”还是很多的
下面分享一下对cookies的简单操作
http://www.dtan.so
-----------------------------------------------------操作-----------------------------------------------------------
1.添加cookies(用cookies方式去做sso,用户信息保存,修改都会依赖cookies)
[c-sharp] view plain copy print ?
- #region##添加cookeis
-
-
-
- public void AddCookies()
- {
- HttpCookie cookies = new HttpCookie("Porschev");
- cookies["name"] = "Zhong Wei";
- cookies["sex"] = "1";
- cookies.Expires = DateTime.Now.AddMinutes(20);
- Response.Cookies.Add(cookies);
- }
- #endregion
添加cookies一般不会有人出错的。。。记得添加Expires就行
2.修改cookies( 在程序中难免会操作,对用户信息的修改,更新数据库后,也会修改cookies,为了修改后的显示)
方法一:
[c-sharp] view plain copy print ?
- #region##修改cookies
-
-
-
- public void ModCookies()
- {
- HttpCookie cookies = Request.Cookies["Porschev"];
- cookies["name"] = "wilson Z";
- }
- #endregion
新建个测式页。。再取cookies中的name,结果:wilson Z;
这是这次项目中遇到的“杯具”事件之一,当这样修改cookies时,在更新方法中再取这个名为Porschev的cookies,
name的值还为Zhong Wei而非wilson Z,页面显示也不对(己排除页面缓存原因,更新也确实没有成功)
修改方法一:
[c-sharp] view plain copy print ?
- #region##修改cookies
-
-
-
- public void ModCookies()
- {
- HttpCookie cookies = Request.Cookies["Porschev"];
- cookies["name"] = "wilson Z";
-
- Response.Cookies["Porschev"].Expires = DateTime.Now.AddMinutes(-1);
- }
- #endregion
再次测式,结果正确,取出name的值为:wilson Z,页面显示也正确
自己理解:得让以前存入过期时间为20min的cookies失效
3.得到cookies (这个最简单,为求方法完整,还是写上吧)
[c-sharp] view plain copy print ?
- #region##得到cookies
-
-
-
- public void GetCookies()
- {
- HttpCookie cookies = Request.Cookies["Porschev"];
- string name = cookies["name"];
- }
- #endregion
4.删除cookies (删除cookies网上有很多方法,但是删除不是都能管用)
方法一:(最常用的一个删除cookies方法)
[c-sharp] view plain copy print ?
- #region##删除cookies
-
-
-
- public void DelCookeis()
- {
- if (Request.Cookies["Porschev"] != null)
- {
- HttpCookie cookies = new HttpCookie("Porschev");
- cookies.Expires = DateTime.Now.AddDays(-1);
- Response.Cookies.Add(cookies);
- }
- }
- #endregion
在项目中测式,删除部分cookies失败,很无语,于是换一种方法
[c-sharp] view plain copy print ?
- #region##删除cookies
-
-
-
- public void DelCookeis()
- {
- foreach (string cookiename in Request.Cookies.AllKeys)
- {
- HttpCookie cookies = Request.Cookies[cookiename];
- if (cookies != null)
- {
- cookies.Expires = DateTime.Today.AddDays(-1);
- Response.Cookies.Add(cookies);
- Request.Cookies.Remove(cookiename);
- }
- }
- }
- #endregion
测式:删除成功
自己理解:方法一只能删除提当前Response中的cookies,不对完成删除掉客端的cookies,用遍历cookies的方式可以
方法一定对,己经过项目实际验证,观点不一定正确,请各位见谅!!