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强制存储.

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

  • 相关阅读:
    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
    001 Android Studio 首次编译执行项目过程中遇到的几个常见问题
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    CF888G Xor-MST(异或生成树模板)
  • 原文地址:https://www.cnblogs.com/LuoEast/p/10001580.html
Copyright © 2011-2022 走看看