using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace CallCenterApi.Common { /// /// 对cookie的操作(带壳版) /// /// /// 带壳版的意思是之前ASP支持的那种二维cookie,cookie[][], /// 动用的是cookie.values,原版是cookie.value. /// 并且直接DES加密 /// public class CookieUtil { [DebuggerStepThrough] public static void SetCookie(string name, Dictionary values) { SetCookie(name, values, null, null); } [DebuggerStepThrough] public static void SetCookie(string name, Dictionary values, string domain) { SetCookie(name, values, domain, null); } [DebuggerStepThrough] public static void SetCookie(string name, Dictionary values, DateTime expires) { SetCookie(name, values, null, expires); } [DebuggerStepThrough] public static void SetCookie(string name, Dictionary values, string domain, DateTime? expires) { HttpCookie cookie = new HttpCookie(name); foreach (string k in values.Keys) { cookie.Values.Add(k, HttpUtility.UrlEncode(DESEncrypt.Encrypt(values[k]), Encoding.UTF8)); } if (expires != null) { cookie.Expires = (DateTime)expires; } if (!string.IsNullOrEmpty(domain)) cookie.Domain = domain; cookie.HttpOnly = true; HttpContext context = HttpContext.Current; context.Response.Cookies.Add(cookie); } /// /// 获取cookie(已解密) /// /// /// /// [DebuggerStepThrough] public static string GetCookie(string name, string key) { if (HttpContext.Current == null) { return null; } string valu = ""; HttpContext context = HttpContext.Current; HttpCookie cookie = context.Request.Cookies[name]; if (cookie != null) { valu = DESEncrypt.Decrypt(HttpUtility.UrlDecode(cookie.Values[key], Encoding.UTF8)); } return valu; } [DebuggerStepThrough] public static void RemoveCookie(string name) { SetCookie(name, new Dictionary(), "", DateTime.Now.AddDays(-1)); } /// /// 将要删除的二维Cookie,写成Dictionary形式传入 /// /// /// /// 没有基于SetCookie方法 public static void RemoveCookie(string name, List values) { HttpContext context = HttpContext.Current; HttpCookie cookie = context.Request.Cookies[name]; List cookiekeys = Utils.StrArrayToList(cookie.Values.AllKeys); foreach (string k in values) { //if (cookiekeys.Contains(k)) cookie.Values.Remove(k); } context.Response.Cookies.Add(cookie); } /// /// 清楚所有cookie /// public static void RemoveAllCookies() { HttpContext context = HttpContext.Current; foreach (string cookieKey in context.Request.Cookies.AllKeys) { context.Response.Cookies[cookieKey].Expires = DateTime.Now.AddDays(-1); } } /// /// 修改cookie,将要修改的二维Cookie,写成Dictionary形式传入 /// /// /// /// 没有基于SetCookie方法 public static void UpdateCookie(string name, Dictionary values) { HttpContext context = HttpContext.Current; HttpCookie cookie = context.Request.Cookies[name]; List cookiekeys = Utils.StrArrayToList(cookie.Values.AllKeys); foreach (string k in values.Keys) { //if (cookiekeys.Contains(k)) cookie.Values[k] = HttpUtility.UrlEncode(DESEncrypt.Encrypt(values[k]), Encoding.UTF8); } context.Response.Cookies.Add(cookie); } } }