单点登录sso 、cookie跨域

本文深入探讨了Cookie在不同域名环境下的共享机制、权限限制及解决策略,包括子域名间的共享、主域名与子域名间的权限管理、第三方Cookie生成与IE权限配置。同时介绍了SSO单点登录的实现方式以及不同主域名间的登录共享机制,强调了在不同服务器上的会话状态管理。最后讨论了限制单一客户端登录的技术手段和在不同服务器环境下通过数据库或文件存储登录状态的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

setcookie();中的第五个参数是域名参数domain

这个参数如果是.domain.com那么这个cookie可以在主域名或者任意子域名都能够获取。相同域名下。子域名间可以相互共享。但是不相同的域名下不能直接共享。

 

不同(主)域名直接可以通过嵌套的方式生成cookie,通过A域名下的页面嵌套B域名下的连接,从而生成B域名的cookie。但是不能直接相互共享。

嵌套的方式在ie下可能会被阻止,不同的浏览器对第三方生成cookie是有着不同的权限的。因此用到p3p开启ie的权限允许第三方生成cookie

header('P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"');//p3p 

  

sso单点登录

A登录之后,产生一个标示,带着这个标示去访问B(判断是否登录成功),再获取数据。

只要sessionid知道 就可以去找链接池找到登录状态

相同域名下的子域名直接相对简单:

子域名下setcooke.php

<?php 
	//假如登录成功了
	//在子域名下生成一个共享cookie
	$gongxiang = "zhuliuyang";
	
	setcookie("gongxiang",$gongxiang,time()+3600,"/",".cs.com");//设置共享的cookie
	
	session_id($gongxiang);//设置session_id
	session_start();//开启 session
	$_SESSION['isLogin'] = '1';
	
	echo "set success";

  

主域名下判断是否登录

<?php 
if(isset($_COOKIE['gongxiang']) && $_COOKIE['gongxiang']!=false)
{
	session_id($_COOKIE['gongxiang']);//获取共享cookie并设置session_id
}
session_start();//开启session

echo "<pre>";
var_dump($_COOKIE);
var_dump($_SESSION);
echo "</pre>";

?> 

  运行结果:

 

清除cookie之后。是两个空数组。

 

不同主域名下原理也是一样的。前提是在同一服务器上。不在同一服务器上,那么session的连接池就找不到了。

 

对于只允许一个客户端登陆的问题。需要把登陆成功的sessionid存起来,登陆成功之后的sessionid与保存的sessionid 作对比。一样的话则是同一客户端。不一样的话改变登陆状态(改变保存sessionid的登陆状态,强制退出)。

 

在不同的服务器上可以把登录状态存到统一的数据库中或者文件中。再进行判断

 

对于不同的主域名之间的sso登陆:通过url连接的标识到保存登陆状态的服务器去验证登陆状态,返回结果。再取数据

 

 

 

(未完待续)

转载于:https://www.cnblogs.com/dzlffmx/p/4998546.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值