單點登入-跨域寫cookie的實現
阿新 • • 發佈:2021-06-23
不多說,上程式碼:
前端頁面,地址示例:https://a.com/index.html,程式碼:
<!DOCTYPE html> <html charset="utf-8"> <head> <script type="text/javascript" src="/jquery.js"></script> </head> <body> <button id="login">登入</button> </body> <script type="text/javascript"> <script> $(document).ready(function(){ $("#login").click(function(){ $.ajax({ url: 'https://t.a.com/test1.php', type: 'GET', success: function (data) { /** 在test1.php中或此處寫cookie */ $.ajax({ /** 這裡只是一個演示,在專案中需要有驗證 */ url: "https://t.b.com/test2.php", type: "GET", dataType: "jsonp", //指定伺服器返回的資料型別 success: function (data) { } }); } }); }); }); </script> </html>
test1.php
<?php //隨便寫就好了,狀態碼是200就OK
test2.php,這裡是跨域訪問
<?php // 指定允許其他域名訪問 header("Access-Control-Allow-Origin: *"); // 是否允許後續請求攜帶認證資訊(cookies),該值只能是true,否則不返回 header("Access-Control-Allow-Credentials: true"); // 允許的請求頭欄位 header("Access-Control-Allow-Headers: *"); /** Set-Cookie由伺服器傳送,它包含在響應請求的頭部中。它用於在客戶端建立一個Cookie * SameSite的值可以設定為3種:Strict Lax None * 其中Strict最為嚴格,如果設定為Strict,上表的方式均無法附帶Cookie。Lax稍微寬鬆點,設定為Lax,會限制部分請求。 * 當設定為None的時候表示關閉不啟用SameSite防護。 */ header("Set-Cookie: admin=demo; secure=true; path=/; domain=b.com; SameSite=None");
需要特別注意的地方:
1、一定要是HTTPS請求;
2、實際專案中一定要有驗證。