zoukankan      html  css  js  c++  java
  • ASP.NET Core2.1 中如何使用 Cookie和Session

    https://blog.csdn.net/canduecho/article/details/80651853

    ASP.NET Core2.1的官方项目模板在创建的Razor Pages和MVC项目的时候,会自动帮你添加这个GDPR协议的支持.so..就存不进去了..

    大概在模版中帮我们生成了如下内容:

    • 在Startup设置了 CookiePolicyOptions和UseCookiePolicy
    • 添加_CookieConsentPartial.cshtml 局部视图
    • 在根目录/ Privacy.cshtml主页/ Privacy.cshtml视图提供了一个页面,让你详细说明你的网站的隐私政策。上面的_CookieConsentPartial.cshtml文件会生成一个链接到这个页面。
    • 对于使用个人用户帐户创建的应用程序,管理页面提供了下载和删除个人用户数据的链接

    我们来看看它添加的内容(这里因为没用到UseCookiePolicy,所以我们暂且不论).

    在Startup中的ConfigureServices方法,我们找到设置CookiePolicyOptions的代码如下:

    复制代码
                services.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies 
                    // is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
    复制代码

    其实,到这里,我们基本就已经解决了cookie存不进去的问题..我们可以看到他默认设置CheckConsentNeeded 为true了.我们只需要设置为false.或者删除这一段代码,那么我们的 cookie就能正常的使用了

    但是,既然欧盟出台了这个规范,虽然管不到中国..估计迟早要全球推广或者你做的是欧盟国际的项目,就必然要支持..所以我们继续往下看..

    我们找到 _CookieConsentPartial.cshtml局部视图

    在如图位置:

     

    我们打开,会发现里面是一句提示,有同意和了解更多的一些选项,我们翻译一下,运行项目,效果如下:

    不过这时候你要是满心欢喜的点了同意..那就需要多看看JS了..我们会发现,这个同意所对应的JS里面的相关代码并没有写完..

    那我们自己把他补充完整.

    首先我们添加控制器方法如下:

    复制代码
     public bool OkCookie()
     {
        var consentFeature = HttpContext.Features.Get<ITrackingConsentFeature>();
        consentFeature.GrantConsent();
        return true;
     }
    复制代码

    也就是让该用户同意使用cookie并做上标记.(原理其实就是在cookie中添加了一个标记,如果有这个标记就是同意了.可以自行查看源码)

    然后我们添加JS脚本如下:

    复制代码
            (function () {
                document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
                    document.cookie = el.target.dataset.cookieString;
                   // document.querySelector("#cookieConsent").classList.add("hidden");
                    $.post("@Url.Action("OkCookie","Home")", "", function () {
                        document.querySelector("#cookieConsent").classList.add("hidden");
                    }
                    )
                }, false);
            })();
    复制代码
     

    设置cookie属性

    与之前的asp.net 不同,设置cookie的详细属性值,不在是new一个HttpCookie对象了..

    而是在Append的时候多了一个参数,为CookieOptions

    使用方法如下:

     Response.Cookies.Append("8888", "999999", new CookieOptions()
     {
      HttpOnly = true,
      Secure = true
     });

    几个常用的cookie属性解释一下:

    2.1  HttpOnly 

       设置为后台只读模式,前端无法通过JS来获取cookie值,可以有效的防止XXS攻击

    2.2 Secure 

       采用安全模式来传递cookie,如果设置为true,就是当你的网站开启了SSL(就是https),的时候,这个cookie值才会被传递

    2.3 MaxAge

     cookie的有效毫秒数,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效;如果设置为0,则立即删除该Cookie。

    2.4 IsEssential

    是否强制存储cookie,注意,这里的强制 是针对于上面所讲的内容的..也就是当用户不同意使用cookie的时候,你也可以通过设置这个属性为true把cookie强制存储.

    访问我们刚刚的方法,并隐藏这个提示.

  • 相关阅读:
    Debug和Release区别
    C语言程序_管理系统
    读书的学问
    御姐的含义
    进制的英文书写
    CHM文件无法打开的解决方法
    819代码
    点击链接不跳转或刷新
    MS SqlServer 随机查询并随机排序
    Html背景图
  • 原文地址:https://www.cnblogs.com/LuoEast/p/10001580.html
Copyright © 2011-2022 走看看