1. 程式人生 > >jsonp跨域實現單點登錄,跨域傳遞用戶信息以及保存cookie註意事項

jsonp跨域實現單點登錄,跨域傳遞用戶信息以及保存cookie註意事項

進行 -a insert sessionid call ade 會有 con 方式

網站A:代碼:網站a的login。html頁面刷新,使用jsonp方式將信息傳遞給b.com的login.php中去,只需要在b.com中設置一下跨域以及接收參數,然後存到cookei即可,

註意:網站A的jsnop傳值後,網站B的login.php文件不能放到瀏覽器中打開刷新查看傳遞的值,這樣會接收不到傳遞過來的值,需要到另外一個頁面打印生成的cookei值來顯示,login.php只做邏輯處理,要顯示

效果需要到cookei.php中打印效果

網站A的login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery.js"></script>
<script type="text/javascript">
$(
function(){ $.ajax({ type : ‘get‘, url:‘http://b.com/login.php‘, data : { uid : ‘333333‘, password : ‘858888‘, }, cache :false, jsonp: "callback", jsonpCallback:"success", dataType : ‘jsonp‘, success
:function(data){ //alert(data); }, error:function(data){ //alert(‘error‘); } }); }); </script> </head> <body> <input id=‘inputtest‘ value=‘546‘ name=‘inputtest‘> <div id=‘testdiv‘></div> </body> </html>

網站B的login.php頁面,本頁面只做邏輯處理,千萬別用來打印顯示任何東西,否則會清空jsonp傳過來的值

<?php
header("Access-Control-Allow-Origin: *");
header(‘Access-Control-Allow-Headers:Authorization‘);
header("Access-Control-Allow-Methods: GET, POST, DELETE");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With, Cache-Control,Authorization");

file_put_contents(‘test.txt‘,$_GET);
setcookie("user_ticket",$_GET[‘uid‘], time()+3600*24 ,"/");
$_COOKIE[‘user_ticket‘] = $_GET[‘uid‘];

網站B的cookei.php頁面,本頁面用來顯示login.php頁面中生成的cookie的值,用來查看效果

<?php

print_r( $_COOKIE);

自此jsonp跨域傳值完成,此功能可用來進行單點登錄,

用戶1在網站A登陸後,在cookie中會有本用戶的sessionid來判別身份,將sesion信息存在redis中去,並將本用戶信息存在cookei中或者在登錄成功頁面寫兩個隱藏域

吧用戶信息放到隱藏域裏面,使用jsonp將用戶信息,發送給網站B,

網站B使用上述方法,獲取到用戶1的信息後,存到cookei中去,然後將cookei中的用戶信息去與redis中信息比對,看看是否登錄過期,以及安全驗證,

如果驗證通過,將用戶1信息,存到網站B的session或者cookei中去,實現單點登錄

jsonp跨域實現單點登錄,跨域傳遞用戶信息以及保存cookie註意事項