关于JSONP 的介绍请参考:http://chinazblz.blog.163.com/blog/static/93939173201042485426995/
本实验模拟在两个不同域 www.sso.com 和 www.ss.com 下进行单向单点登录。
但用户访问 www.sso.com 时(A 服务器),会在浏览器中种下 cookie。
当用户访问 www.ss.com 时(B 服务器),则会通过jsonp 从本浏览器的 sso.com 域中获取到cookie中的用户名,然后在页面进行显示
在 A 服务器中的登录和种Cookie,比较容易理解,这里重点讲一下 在A 服务器中的 jsonp.php
jsonp.php 是 A 服务器和B服务器进行通信的桥梁。在jsonp.php中要完成 读取和输出Cookie中 username 的值:
<?php $callback = isset(
{1}
GET['callback']) ?{1}
GET['callback'] : '';$json ={1}
COOKIE['username'];$json = '"'.$json.'"';if (!empty($callback)) { $json = $callback . '(' . $json . ')';}echo $json;?>
在B服务器中则需要做2件事情:
1. 定义响应函数response 。 在响应函数中,对jsonp.php 返回的用户名进行显示
2. 通过script 标签,引入 jsonp.php?callback = response
<html> <head> <script type="text/javascript"> function response(words){ //通过cookie判断是否登录 if(typeof(words) != 'undefined'){ var h1 = document.getElementById('welcome'); h1.value = words; } } </script> </head> <body> <input type="text" id="welcome" /> <script type="text/javascript" src="http://www.sso.com/SSO/jsonp.php?callback=response"></script> </body> </html>
总的交互过程如下图: