以前对cookie的了解很浅,只知道是在浏览器里面可以保存用户信息的东西,可以被清除,可以被盗取。
现在简单说下,cookie,目前理解下来只能存string类型的内容,以键值形式保存,一个cookie name下可以有多组键值。
cookie的存入:
if (HttpContext.Current.Request.Cookies[name] == null) { var cookie = new HttpCookie(name, Common.Encryption2(value)); //cookie.Expires = DateTime.Now.AddDays(1); cookie.Path = "/"; HttpContext.Current.Response.Cookies.Set(cookie); }
先判断是否已存在名称为name的cookie,然后进行保存,设置过期时间和路径。
由于cookie会在每个访问的页面单独生成,故在做全局cookie时需要将其路径设为根目录,使全局能访问。
set为更新cookie,存在则更新,不存在则新建。
Encryption则是为了防止cookie被窃取而进行的编码。
cookie的修改:
public static string UserName { get { var lang = string.Empty; if (HttpContext.Current.Request.Cookies["xxx_UserName"] !=null) lang = Common.Decryption2(HttpContext.Current.Request.Cookies["xxx_UserName"].Value.ToString()); return lang; } set { var s = string.Empty; if (value != null) s = value.ToString(); HttpContext.Current.Response.Cookies["xxx_UserName"].Value = Common.Encryption2(s); } }
以get,set方法的形式对username进行修改,读和写。
注意,cookie在获取时为Request,在写入时为Response。
Decryption为解码。
cookie的删除:
之前一直认为用cookie自带的Remove即可,尝试多次后无果。上网查询了一下,发现remove是其继承下来的一个方法,必须要有。。但是不起决定性作用。
尝试设置过期时间,效果也不好,最后在一个不知道什么地方给我找到了有用的方法。
HttpCookie cookies = HttpContext.Current.Request.Cookies[name]; if (cookies != null) { cookies.Expires = DateTime.Now.AddDays(-1); HttpContext.Current.Response.Cookies.Add(cookies); HttpContext.Current.Request.Cookies.Remove(name); }
试过可行。