.netcore session跨域ID不一致


     問題的產生

  • 流程是這樣的,要做一個用戶登錄的接口。在登錄頁面,前端先請求驗證碼,然后輸入用戶名密碼和驗證碼之后,請求登錄接口。
  • 這里存在兩個接口,驗證碼接口和登錄接口。在驗證碼接口中我用session保存驗證碼,在登錄接口中我從session取出驗證碼進行校驗。

    解決問題

    其實最后就做了兩件事情,
    1. 服務端設置可以接收cookie信息

  • .AllowCredentials();

    在ajax請求中設置發送cookie信息

  •  $.ajax({
       url: a_cross_domain_url,
       xhrFields: {
          withCredentials: true
       }
    });

    非跨域情況下,這個參數無效

  • 因為在默認情況下,跨源請求不提供憑據(cookie、HTTP認證及客戶端SSL證明等)。通過將withCredentials屬性設置為true,可以指定某個請求應該發送憑據。如果服務器接收帶憑據的請求,會用下面的HTTP頭部來響應。

    雖然設置了widthCredentials為true的請求中會包含遠程域的所有cookie,但這些cookie仍然遵循同源策略,所以外域是訪問不了這些cookie的,現在我們就可以安全地跨域訪問啦。

  • 先解釋一下

    跨域:

    瀏覽器對於javascript的同源策略的限制,例如a.cn下面的js不能調用b.cn中的js,對象或數據(因為a.cn和b.cn是不同域),所以跨域就出現了.

         同域的概念又是什么呢???

  • 簡單的解釋就是相同域名,端口相同,協議相同

 

       同源策略:

 

       請求的url地址,必須與瀏覽器上的url地址處於同域上,也就是域名,端口,協議相同.

 

       比如:我在本地上的域名是study.cn,請求另外一個域名一段數據

 

 

這個時候在瀏覽器上會報錯:

 

 

這個就是同源策略的保護,如果瀏覽器對javascript沒有同源策略的保護,那么一些重要的機密網站將會很危險~

 

study.cn/json/jsonp/jsonp.html
 請求地址  形式  結果
 http://study.cn/test/a.html 同一域名,不同文件夾  成功
 http://study.cn/json/jsonp/jsonp.html 同一域名,統一文件夾  成功
 http://a.study.cn/json/jsonp/jsonp.html 不同域名,文件路徑相同  失敗
 http://study.cn:8080/json/jsonp/jsonp.html  同一域名,不同端口  失敗
 https://study.cn/json/jsonp/jsonp.html  同一域名,不同協議    失敗

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 測試:在session未賦值之前,sessionid是不固定的,每次請求都會刷新新的ID,未設置withCredentials,每次刷新sessionid都是新的,賦值也取不到值。
  • 設置了withCredentials后,session賦值,sessionid就固定了。
  • (自我理解就是設置withCredentials跨域后,操作sessionid是操作另一域的session 了  未賦值是sessionid是不固定的,只要賦值就固定了·)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM