.net core Cookie填坑
__cycle
2021年07月22日 17:24
收录于文集
共8篇

版本:.net core 3.1

由于WebAPI返回的json都是小写的,并且项目用的NewtonsoftJson

=========================Json格式返回大写开头============================

services.AddControllersWithViews().AddNewtonsoftJson(options =>

{

          //使用默认的解析类

          options.SerializerSettings.ContractResolver = new DefaultContractResolver();

          options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

});

services.AddMvc().AddJsonOptions(o =>

{

          //将默认的策略设置为null

          o.JsonSerializerOptions.PropertyNamingPolicy = null;

          o.JsonSerializerOptions.DictionaryKeyPolicy = null;

});

====================================================================

之后发现在用到Session的时候发现设置Session老是取不到,客户端每次请求的SessionId都是不一样的(之前是没问题的),首先是想到了跨域的问题

==========================跨域SessionId不一致==========================

后端:

services.AddCors(confg =>

{

     //AllowCredentials() 是禁止  AllowAnyOrigin()的,需要指定Origin

     confg.AddPolicy(Constants.VueCors, p =>

         p.AllowCredentials().AllowAnyMethod().AllowAnyHeader()

           .WithOrigins("http://localhost:8083&#​34;)

     );

});

app.UseCors(Constants.VueCors);

前端:

axios.defaults.withCredentials = true; 

======================================================================

设置完跨域后SessionId还是不一致,查看了Request和Response,发现在Response中SetCookie的信息后面有个叹号:此Set-Cookie被阻止,因为它具有“ SameSite = Lax”属性,但来自跨站点响应,而不是对顶级导航的响应.

这是在.net core设置防跨站脚本攻击时会有的设置,但是我没添加过,后面查资料发现这是由于我前面改Json返回格式时调用了AddMvc(),这个方法中调用到了AddAntiforgery(),那么需要给Cookie设置SameSite

==========================设置Cookie SameSite===========================

services.AddSession(options =>

{

        options.Cookie.Name = "MyID.Session&#​34;;

        options.IdleTimeout = System.TimeSpan.FromSeconds(120);

        options.Cookie.IsEssential = true;

        options.Cookie.HttpOnly = true;

        options.Cookie.SameSite = SameSiteMode.None;

        //这条也是必须的,SameSiteMode.None时必须设置

        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;

});

======================================================================