欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[27期] 利用cookie实现SSO(网上搜的,分享下)

程序员文章站 2022-07-16 14:16:04
...

利用cookie实现跨域,可以称为SSO单点登录

A网站首页PHP(也可以在登录页面加入下面的代码)加入如下代码
view plaincopy to clipboardprint?
1. <?php
2. //清空cookies
3. setcookie("mywinduid");
4. //为B页面权限设置cookie, setcookie("mywinduid",$winduid,time()+60*60*24);//设置为1天失效,下面为关闭浏览器失效
5. setcookie("mywinduid",$winduid);
6. ?>

A网站增加文件getcookies.php,目的是为了让B网站可以以ajax方式来查询A网站的cookie
getcookies.php 代码如下
view plaincopy to clipboardprint?
1. <?php
2. $callback = $_GET['jsoncallback'];
3. $mywinduid = $_COOKIE['mywinduid'];//多个参数的话以","隔开,例如json_encode(array('winduid'=>$winduid,'msg'=>$msg));
4. //可以用json_encode自动转换,也可以手写json格式 $json_data = '{"mywinduid":'.$mywinduid.'}';
5. $json_data = json_encode(array('mywinduid'=>$mywinduid));
6. //必需以下这样形式输出,重点就是发送请求的网页的参数中要有jsoncallback参数
7. echo $callback.'('.$json_data.')';
8. ?>

在需要查询A网站cookie的B网站页面中增加如下代码
view plaincopy to clipboardprint?
1. <script type="text/javascript" src="jquery-1.6.1.min.js"></script>
2. <script type="text/javascript" src="jquery.cookie.js"></script>
3. <script type="text/javascript">
4. $(function(){
5. $("#adminwhj").click(function(){//点击B网站中的登录按钮,这地方也可以不需要用click,直接打开页面就获取cookie
6. var myurl = "http://www.a.com/getcookies.php?action=getcookie";
7. $.getJSON(myurl+"&jsoncallback=?", function(data){
8. if(data.mywinduid!="" && data.mywinduid!= null){
9. var winduid = data.mywinduid;
10. if((winduid==4)||(winduid==2)){
11. $.cookie('mywinduid',winduid);//设置cookies
12. location.reload();//刷新页面
13. }else{
14. alert("您没有管理权限!");
15. }
16. }else{
17. alert("请在www.a.com登录后再进行管理");
18. }
19. })
20. })
21. })
22. </script>

下面是B网站的这个页面中需要做权限判断的代码
view plaincopy to clipboardprint?
1. <!--需要权限的判断开始-->
2. <?
3. $winduid=$_COOKIE["mywinduid"];
4. if (($winduid==4)||($winduid==2))
5. {<!--管理需要的代码-->}
6. ?>


整个原理就是,B网站上文件可以通过A网站的getcookies.php来获取A网站的cookie,然后在B网站的页面提供权限判断,这样B网站中不需要再单独做用户登录