zoukankan      html  css  js  c++  java
  • js无法获取.net设置的cookie

    使用CookieHelper帮助类:

    public class CookieHelper
        {
    
            #region 获取Cookie
    
    
            /// <summary> 
            /// 获得Cookie的值 
            /// </summary> 
            /// <param name="cookieName"></param> 
            /// <returns></returns> 
            public static string GetCookieValue(string cookieName)
            {
                HttpRequest request = HttpContext.Current.Request;
                if (request != null)
                    return GetCookieValue(request.Cookies[cookieName]);
                return "";
            }
    
            /// <summary> 
            /// 获得Cookie的值 
            /// </summary> 
            /// <param name="cookie"></param> 
            /// <returns></returns> 
            public static string GetCookieValue(HttpCookie cookie)
            {
                if (cookie != null)
                {
                    return cookie.Value;
                }
                return "";
            }
    
            /// <summary> 
            /// 获得Cookie 
            /// </summary> 
            /// <param name="cookieName"></param> 
            /// <returns></returns> 
            public static HttpCookie GetCookie(string cookieName)
            {
                HttpRequest request = HttpContext.Current.Request;
                if (request != null)
                    return request.Cookies[cookieName];
                return null;
            }
    
            #endregion
    
            #region 删除Cookie
    
    
            /// <summary> 
            /// 删除Cookie
            /// </summary> 
            /// <param name="cookieName"></param> 
            public static void RemoveCookie(string cookieName)
            {
                HttpResponse response = HttpContext.Current.Response;
                if (response != null)
                {
                    HttpCookie cookie = response.Cookies[cookieName];
                    if (cookie != null)
                    {
                         response.Cookies.Remove(cookieName);
                    }
                }
            }
    
            #endregion
    
            #region 设置/修改Cookie
             
    
            /// <summary> 
            /// 设置Cookie 
            /// </summary> 
            /// <param name="cookieName"></param> 
            /// <param name="key"></param> 
            /// <param name="value"></param> 
            /// <param name="expires"></param> 
            public static void SetCookie(string cookieName,string value, DateTime? expires)
            {
                Guard.IsNotNullOrEmpty(cookieName, "cookieName"); 
    
                HttpResponse response = HttpContext.Current.Response;
                if (response != null)
                {
                    HttpCookie cookie = response.Cookies[cookieName];
                    if (cookie != null)
                    {
                        cookie.Value = value; 
                        if (expires != null)
                            cookie.Expires = expires.Value;
                        response.SetCookie(cookie);
                    }
                }
    
            }
    
            #endregion
    
            #region 添加Cookie
             
             
    
            /// <summary> 
            /// 添加为Cookie.Values集合 
            /// </summary> 
            /// <param name="cookieName"></param> 
            /// <param name="key"></param> 
            /// <param name="value"></param> 
            /// <param name="expires"></param> 
            public static void AddCookie(string cookieName,  string value, DateTime expires)
            {
                Guard.IsNotNullOrEmpty(cookieName, "cookieName");
    
                HttpCookie cookie = new HttpCookie(cookieName);
                cookie.Expires = expires;
                cookie.Value = value;
                AddCookie(cookie);
            }
    
            /// <summary> 
            /// 添加Cookie 
            /// </summary> 
            /// <param name="cookie"></param> 
            public static void AddCookie(HttpCookie cookie)
            {
                HttpResponse response = HttpContext.Current.Response;
                if (response != null)
                {
                    //指定客户端脚本是否可以访问[默认为false] 
                    cookie.HttpOnly = true;
                    //指定统一的Path,比便能通存通取 
                    cookie.Path = "/";
                    //设置跨域,这样在其它二级域名下就都可以访问到了 
                    //cookie.Domain = "nas.com"; 
                    response.AppendCookie(cookie);
                }
            }
    
            #endregion
        }

    设置cookie:

       public static string VCLoginName
            {
                get
                {
                    try
                    {
                        return CookieHelper.GetCookieValue("VCLoginName").ToStr();
                    }
                    catch
                    {
                        return "0";
                    }
                }
                set
                {
                    var cookie = CookieHelper.GetCookie("VCLoginName");
                    if (cookie != null)
                    {
                        CookieHelper.SetCookie("VCLoginName", value, DateTime.Now.AddHours(1));
                    }
                    else
                    {
                        //有效期,一个钟头
                        CookieHelper.AddCookie("VCLoginName", value, DateTime.Now.AddHours(1));
                    }
    
                }
            }

    设置:

     SysContext.VCLoginName = user.LoginName;

    js获取和设置cookie:

     function getCookie(cname) {
                console.log("开始")
                console.log(document.cookie)
                console.log("结束")
                var arrStr = document.cookie.split("; ");
               
                for (var i = 0; i < arrStr.length; i++) {
    
                    var temp = arrStr[i].split("=");
    
                    if (temp[0] == cname) return unescape(temp[1]);
    
                }
    
            }
    
     //添加cookie
            function addCookie(cname, cvalue, ctime) {
                var str = cname + "=" + escape(cvalue);
                if (ctime > 0) {                               //为时不设定过期时间,浏览器关闭时cookie自动消失
                    var date = new Date();
                    var ms = ctime * 3600 * 1000;
                    date.setTime(date.getTime() + ms);
                    str += "; expires=" + date.toGMTString();
                    alert(cname + cvalue);
                }
                document.cookie = str;
            }

    遇到的问题:

    后台设置cookie但是通过js无法获取相应的cookie的值,why?

    不知道。但是自己在一般处理程序中写的cookie却可以通过js获得。why?

     HttpCookie cookie = new HttpCookie("LoginName", HttpUtility.UrlEncode(username)); //定义cookie对象以及名为DocUrl的项 
            DateTime dt = DateTime.Now;                  //定义时间对象 
            TimeSpan ts = new TimeSpan(0, 12, 20, 0);         //天,小时,分钟,秒  ,cookie有效作用时间
            cookie.Expires = dt.Add(ts);                 //添加作用时间 
            context.Response.AppendCookie(cookie);               //确定写入cookie中

    解决:

    因为CookieHelper中设置了cookie的HttpOnly为true。

    ASP.Net中HttpCookie对象的HttpOnly 属性 指定一个Cookie 是否可通过客户端脚本访问。不能通过客户端脚本访问为 true;否则为 false。默认值为 false。此属性并不能完全阻止客户端在本地获取cookies,但是可以增加通过脚本直接获取的难度。

  • 相关阅读:
    supervisor 配置
    单链表
    二叉排序树
    python 排序
    64 位 Ubuntu 下 android adb 不可用解决方法
    python 获取文件夹大小
    Ubuntu mongodb 安装和配置
    关于c3p0配置详细说明
    dwr消息推送
    关于如果修改 ie 浏览器 文本模式
  • 原文地址:https://www.cnblogs.com/huangshuqiang/p/10252782.html
Copyright © 2011-2022 走看看