有时候对于一些公开得数据我们想通过cookie存储
一.web前端cookie存储
var expdate = new Date(); //初始化时间
expdate.setTime(expdate.getTime() + 30 * 60 * 1000); //时间单位毫秒
document.cookie = name+"="+value+";expires="+expdate.toGMTString()+";path=/";
这里有几个字段需要注意
1.expires为过期时间,如果当前时间大于过期时间,该cookie会被清除
2.Path这个需要注意如果指定得话,会导致cookie无法被访问
二.C#后端如何获得
HttpContext.Current.Request.Cookies[key].Value;就可以获取
我们前后端得交互是用ajax提交至webapi做,那么我后台要在请求里面能得到cookie,不过如果存在跨域等问题,那么在ajax就需要一个变化
$.ajax({
url: a_cross_domain_url,
// 将XHR对象的withCredentials设为true
xhrFields:{
withCredentials:true
}});
三.提供一个cookiehelper得类库
public class CookieHelper
{
/// <summary>
/// 清除指定Cookie
/// </summary>
/// <param name="cookiename">cookiename</param>
public static void ClearCookie(string cookiename)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookiename];
if (cookie != null)
{
cookie.Expires = DateTime.Now.AddYears(-3);
HttpContext.Current.Response.Cookies.Add(cookie);
}
}
/// <summary>
/// 获取指定Cookie值
/// </summary>
/// <param name="cookiename">cookiename</param>
/// <returns></returns>
public static string GetCookieValue(string cookiename)
{
if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[cookiename] != null)
{
return HttpContext.Current.Request.Cookies[cookiename].Value;
}
return "";
}
/// <summary>读cookie值,Cookies[key]
/// </summary>
/// <param name="cookiename">名称</param>
/// <param name="key">key</param>
/// <returns>cookie值</returns>
public static string GetCookieValue(string cookiename, string key)
{
if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[cookiename] != null && HttpContext.Current.Request.Cookies[cookiename][key] != null)
{
return HttpContext.Current.Request.Cookies[cookiename][key].ToString();
}
return "";
}
/// <summary>
/// 添加一个Cookie(1年后过期)
/// </summary>
/// <param name="cookiename"></param>
/// <param name="cookievalue"></param>
public static void SetCookie(string cookiename, string cookievalue)
{
var strCookieValue = HttpUtility.UrlEncode(cookievalue, System.Text.Encoding.GetEncoding("UTF-8"));
SetCookie(cookiename, strCookieValue, DateTime.Now.AddYears(1));
}
/// <summary>
/// 添加一个Cookie,带过期时间
/// </summary>
/// <param name="cookiename">cookie名</param>
/// <param name="cookievalue">cookie值</param>
/// <param name="expires">过期时间 DateTime</param>
public static void SetCookie(string cookiename, string cookievalue, DateTime expires)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookiename];
if (cookie == null)
{
cookie = new HttpCookie(cookiename);
}
cookie.Value = cookievalue;
cookie.Expires = expires;
HttpContext.Current.Response.AppendCookie(cookie);
}
/// <summary>写cookie值,Cookies[key](1年后过期)
/// </summary>
/// <param name="cookiename">名称</param>
/// <param name="key">key</param>
/// <param name="cookievalue">值</param>
public static void SetCookie(string cookiename, string key, string cookievalue)
{
SetCookie(cookiename, key, cookievalue, DateTime.Now.AddYears(1));
}
/// <summary>写cookie值,Cookies[key],带过期时间
/// </summary>
/// <param name="cookiename">名称</param>
/// <param name="key">key</param>
/// <param name="cookievalue">值</param>
/// <param name="expires">过期时间(分钟)</param>
public static void SetCookie(string cookiename, string key, string cookievalue, DateTime expires)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookiename];
if (cookie == null)
{
cookie = new HttpCookie(cookiename);
}
cookie[key] = cookievalue;
cookie.Expires = expires;
HttpContext.Current.Response.AppendCookie(cookie);
}
}