1. 程式人生 > 其它 >單點登入-跨域寫cookie的實現

單點登入-跨域寫cookie的實現

不多說,上程式碼:

前端頁面,地址示例: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、實際專案中一定要有驗證。