`

SSO 跨域名(两个截然不同的域名共用一个 cookie )

    博客分类:
  • SSO
阅读更多
   有时在编代码的时候,累并不是一件坏事,当你累时,你应该出去空气流通的地方放松一下自己的心情。这样说不定会突然茅塞顿开。
    研究了一个礼拜 Cookie 跨域问题 ,今天终于解决了,其用这么久解决的原因是:懒得去动,只是思考,所以 希望看到这篇文章的朋友们 一定要 多思考,勤动手。失败就是在快成功的时候没能再坚持一点点。
    下来进入正题:我负责的服务器的的域名是: http://uc.cun365.com 
计划要跨域共享 cookie 的另一台服务器的域名是: http://www.c365.com
    分析:所谓人们常用的 cookie 跨域是说: uc.cun365.com 下登录,凡是后缀名为:.cun365.com  的服务器都可共享同一个 cookie, 这种方式相对比较容易解决,只要设置一下 setDomain(".cun365.com") 就行。但是问题来了,如果要跨另一台服务器的话,我们应该怎么办呢?
     解决:再次使用上面那种方法 setDomain(".c365.com") 已经是不可能实现,因为它两使用的服务器不是同一个,而且也不是 二级域名的关系,所以目前有两种方法解决遇到的这种问题。
    方法1
         步骤(1):创建 jsp 页面 ,名字为: login4cun.jsp
<%@ page language="java" pageEncoding="GBK"%>

测试 在 村网 登录 后 隐士在 生活网 登录
<%
String token = request.getParameter("token");
String passport = request.getParameter("passport");
if(null != token && null!=passport){
	response.setHeader("P3P","CP=\"NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC\"");
	
	session.setAttribute("cnlifeUserToken", token);
	session.setAttribute("cnlifeUserId", passport);

	Cookie aCookie = new Cookie("cnlifeUserToken", token);
	aCookie.setMaxAge(-1);
	aCookie.setDomain(".c365.com");
	aCookie.setPath("/");
	response.addCookie(aCookie);

	passport = new String(passport.getBytes("GBK"), "ISO8859_1");
	aCookie = new Cookie("cnlifeUserId",passport);

	aCookie.setMaxAge(-1);
	aCookie.setDomain(".c365.com");
	aCookie.setPath("/");
	response.addCookie(aCookie);
}
%>

注意:创建好后一定要放在 域名为 :http:www.c365.com 服务器上,我就是因为不相信这种做法,害的走了4天弯路。

         步骤(2):再创建一个 jsp 页面,名字为: test.jsp
<%@ page language="java" pageEncoding="GBK"%>
<script type="text/javascript" src="http://www.c365.com/header1215/login4cun.jsp?token=aea1a0b549703a2060142b93ecc2846c&passport=renweigang">
</script>

测试 在 村网 登录 后 隐士在 生活网 登录
<%@ page language="java" pageEncoding="GBK"%>
<script type="text/javascript" src="http://www.c365.com/header1215/login4cun.jsp?token=aea1a0b549703a2060142b93ecc2846c&passport=renweigang">
</script>

测试 在 村网 登录 后 隐士在 生活网 登录
<a href="http://www.c365.com/ssoserver/logout.jsp?backurl=http://www.rwg.com:8080/ucenter/themes/default/logout.jsp">注销</a>


注意:以上的参数: token:是 辨别用户的令牌,你可以自己写一个,思路是:先验证用户名与密码是否匹配,如果匹配则 自动生成 一个 有效 的证书(16位的随机数).
passport :为 用户登录名,一定不要是中文,否则会出现 exceptin,因为它是往cookie 中保存,而cookie 的值是不支持 中文的,如果是中文 则把它转为: iso-8859-1即可。


         步骤(3):在火狐浏览器中 测试: http://localhost:8080/ucenter/test.jsp ,然后看看 域名为 .c365.com 的值是不是添加进来了。
注意: 最好在火狐下测试,因为显示的比较直观。
  • 大小: 26.8 KB
  • 大小: 20 KB
  • 大小: 15.1 KB
3
0
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics