jsonp跨域实现单点登录,跨域传递用户信息以及保存cookie注意事项
网站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中去,实现单点登录