C# CookieHelper
2015-11-23 14:55
471 查看
using System; using System.Text.RegularExpressions; using System.Web; public class CookieHelper { /// <summary> /// 清除登录用户的cookie /// </summary> public static void ClearUserCookie(string cookieDomain, string cookiesName) { HttpCookie cookie = new HttpCookie(cookiesName); cookie.Values.Clear(); cookie.Expires = DateTime.Now.AddYears(-1); //string cookieDomain = ConfigFactory.GetConfig().CookieDomain.Trim(); if (cookieDomain != string.Empty && HttpContext.Current.Request.Url.Host.IndexOf(cookieDomain, System.StringComparison.Ordinal) > -1 && IsValidDomain(HttpContext.Current.Request.Url.Host)) cookie.Domain = cookieDomain; HttpContext.Current.Response.AppendCookie(cookie); } /// <summary> /// 读cookie值 /// </summary> /// <param name="strName">名称</param> /// <returns>cookie值</returns> public static string GetCookie(string strName) { var httpCookie = HttpContext.Current.Request.Cookies[strName]; return httpCookie != null ? httpCookie.Value : ""; } /// <summary> /// 获得cookie值 /// </summary> /// <param name="cookiesName">Cookie 名称</param> /// <param name="strName">项</param> /// <returns>值</returns> public static string GetCookie(string cookiesName, string strName) { var httpCookie = HttpContext.Current.Request.Cookies[cookiesName]; if (httpCookie != null && httpCookie[strName] != null) { return HttpUtility.UrlDecode(httpCookie.Values[strName]); } return ""; } /// <summary> /// 是否为有效域 /// </summary> /// <param name="host">域名</param> /// <returns></returns> public static bool IsValidDomain(string host) { Regex r = new Regex(@"^\d+$"); if (host.IndexOf(".") == -1) { return false; } return !r.IsMatch(host.Replace(".", string.Empty)); } /// <summary> /// 写cookie值,不在客户端创建文件,存放在服务器内存中。 /// </summary> /// <param name="strName">名称</param> /// <param name="strValue">值</param> public static void WriteCookie(string strName, string strValue) { HttpCookie cookie = HttpContext.Current.Request.Cookies[strName]; if (cookie == null) { cookie = new HttpCookie(strName); } cookie.Value = strValue; HttpContext.Current.Response.AppendCookie(cookie); } /// <summary> /// 写cookie值,在客户端创建文件。存放cookie值(单一项值)。 /// </summary> /// <param name="strName">名称</param> /// <param name="strValue">值</param> /// <param name="cookieDomain">域</param> /// <param name="expires">cookie 保存时长 单位分种</param> public static void WriteCookie(string strName, string strValue, string cookieDomain, int expires) { HttpCookie cookie = HttpContext.Current.Request.Cookies[strName] ?? new HttpCookie(strName); cookie.Value = strValue; //cookie.Expires = DateTime.Now.AddMinutes(expires); cookie.Expires = DateTime.Now.AddMinutes(expires); cookie.Domain = cookieDomain; HttpContext.Current.Response.AppendCookie(cookie); } /// <summary> /// 写cookie值(存放数组形式参数,用于第一次写cookie值,并指定有效时间) /// </summary> /// <param name="cookieName">cookies名字</param> /// <param name="strValuesName">cookie项的名称,cookie[strValuesName][]</param> /// <param name="strValue">cookie项的值,cookie[strValuesName][strValue]</param> /// <param name="cookieDomain">cookie域属性</param> /// <param name="expiresDays">cookies 有效时间 单位天</param> public static void WriteCookie(string cookieName, string strValuesName, string strValue, string cookieDomain, int expiresDays) { HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName]; if (cookie == null) { cookie = new HttpCookie(cookieName); cookie.Values[strValuesName] = HttpUtility.UrlEncode(strValue); } cookie.Values[strValuesName] = HttpUtility.UrlEncode(strValue); cookie.Values["expires"] = expiresDays.ToString(); cookie.Expires = DateTime.Now.AddDays(expiresDays); if (cookieDomain != string.Empty && HttpContext.Current.Request.Url.Host.IndexOf(cookieDomain) > -1 && IsValidDomain(HttpContext.Current.Request.Url.Host)) cookie.Domain = cookieDomain; HttpContext.Current.Response.AppendCookie(cookie); } /// <summary> /// 写cookie值(操作已经存在的cookie,存放数组形式参数) /// </summary> /// <param name="cookieName">cookies名字</param> /// <param name="strValuesName">cookie项的名称,cookie[strValuesName][]</param> /// <param name="strValue">cookie项的值,cookie[strValuesName][strValue]</param> /// <param name="cookieDomain">cookie域属性</param> public static void WriteCookie(string cookieName, string strValuesName, string strValue, string cookieDomain) { HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName]; if (cookie == null) { cookie = new HttpCookie(cookieName); cookie.Values[strValuesName] = HttpUtility.UrlEncode(strValue); } else { cookie.Values[strValuesName] = HttpUtility.UrlEncode(strValue); var httpCookie = HttpContext.Current.Request.Cookies[cookieName]; if (httpCookie != null && httpCookie["expires"] != null) { int intExpires = 0; if (httpCookie["expires"] != null) { try { intExpires = Convert.ToInt32(httpCookie["expires"]); } catch { } } if (intExpires > 0) { cookie.Values["expires"] = intExpires.ToString(); cookie.Expires = DateTime.Now.AddMinutes(intExpires); } } } if (cookieDomain != string.Empty && HttpContext.Current.Request.Url.Host.IndexOf(cookieDomain, System.StringComparison.Ordinal) > -1 && IsValidDomain(HttpContext.Current.Request.Url.Host)) cookie.Domain = cookieDomain; HttpContext.Current.Response.AppendCookie(cookie); } }
相关文章推荐
- C#利用子窗体中的构造函数 (实现了父窗体给子窗体的传值,但是子窗体的值回传暂未实现)
- C# Upload
- C# ImageHelper
- C# 枚举 位运算 [Flags]标签
- 【C#语言学习】学习一门语言
- CLR中的程序集加载
- 关于C#引用Dll后,找不到命名空间的问题
- C# 多态性
- C# 类的继承
- 《CLR中的程序集加载》
- C#调用endtask
- c#查找窗口的两种办法
- c#调用GetModuleFileNameEx获取进程路径
- C# ——List<Enum> 转化为List<string>
- C#对象序列化与反序列化
- 关于API的C#实现
- C#: static关键字的作用
- C#自定义一定与本地时间同步变动的nowTime
- 轻松学习C#的读写操作
- 轻松学习C#的foreach迭代语句