jsonp跨域實現單點登錄,跨域傳遞用戶信息以及保存cookie註意事項
阿新 • • 發佈:2019-03-03
進行 -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註意事項