前後端分離項目獲取後端跨控制器獲取不到session

最近做前後端分離項目(.net core web api  +vue)時,後台跨控制器不能獲取到session。由於配置的是共享的session。本來以為是共享session出了問題,就在共享session這塊找了大半天的問題,把相關組件刪了一遍,到最後還是不行。最終轉換了思路,是不是前後端分離的問題?是由前端引起的?一查資料,果然是前後端分離引起的問題。由於前台使用axios發送相應的請求,這裡需要進行額外的配置

一.在請求的全局配置中添加如下配置

axios.defaults.withCredentials=true;

這段配置的主要功效是將header中的Access-Control-Allow-Credentials設置為true,意為開啟cookie的認證請求。這個屬性默認是關閉的

完成以上的配置問題大概也就解決了,於是再啟動一波

 

 

天不隨人願,瀏覽器竟然報跨域的錯。本來配置的跨域是沒問題的,加上axios的這個配置就成這樣了。。。

二.後端跨域之前的配置

   services.AddCors(options =>
            {
                options.AddPolicy("all", builder =>
                {
                    builder.AllowAnyOrigin() //允許任何來源的主機訪問
                    .AllowAnyMethod()
                    .AllowAnyHeader();
                    //.AllowCredentials();//指定處理cookie
                });
            });

之前的配置是這樣的,由於.net core新版本出來之後,AllowAnyOrigin()和AllowCredentials()不能一起使用,於是就懶省事的把AllowCredentials()給注釋了(自個給自個埋了個坑。。。)導致請求報跨域的錯

三.後端跨域最終配置

由於AllowAnyOrigin()和AllowCredentials()不能同時使用,我們便使用WithOrigins()來限制指定的主機訪問

  services.AddCors(options =>
            {
                options.AddPolicy("all", builder =>
                {
                    builder.WithOrigins("//localhost:9000") //允許任何來源的主機訪問
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();//指定處理cookie
                });
            });

萬事大吉~~~