使用JsonP實現不同域名共享Session 實現SSO單點登錄

a.com登錄成功後 b.com也可以正常訪問

在這裏插入圖片描述

清空a.com的cookie信息

在這裏插入圖片描述

b.com登錄信息也失效

在這裏插入圖片描述

思路:

1、主要根絕ajax使用jsonp跨域請求時候 同一個單點服務器會使用相同的session 整個項目sessionId相同
2、任何一個項目登錄之後 將sessionId和登錄成功的用戶信息保存到redis中
3、其他站點使用JsonP請求驗證登錄的接口 如果能通過sessionId從緩存中讀取到用戶信息 說明當前用戶已經登錄

**注:**一定要使用單點登錄驗證服務器 有效避免多服務器導致sessionId重複 出現登錄用戶串臺問題

<!doctype html>
<html>

	<head>
		<meta charset="utf-8">
		<title></title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	</head>

	<body>
		<button id="btn" type="button">測試請求</button>
		<script src="https://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
		<script>
			$(function() {
				$.ajax({
					type: "get",
					async: false,
					url: "http://127.0.0.1:8080/webapi/extSmeCustLogin/syncLoginStatus",
					dataType: "jsonp",
					jsonp: "callback", //傳遞給請求處理程序或頁面的,用以獲得jsonp回調函數名的參數名(一般默認爲:callback)
					jsonpCallback: "jsonpCall", //自定義的jsonp回調函數名稱,默認爲jQuery自動生成的隨機函數名,也可以寫"?",jQuery會自動爲你處理數據
					success: function(jsons) {
						Console.log(jsons);
					},
					error: function() {
						Console.log('fail');
					}
				});
			});
			$("#btn").click(function() {
				$.ajax({
					url: "http://127.0.0.1:8080/webapi/partyCollection/count?partyId=1082&partyType=3",
					async: false,
					dataType: "jsonp",
					success: function(data) {
						alert(data.message);
					}
				});
			});
		</script>
	</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章