首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >子级域名实现Cookie共享

子级域名实现Cookie共享

作者头像
每天学Java
发布于 2020-06-02 10:21:09
发布于 2020-06-02 10:21:09
2.4K0
举报
文章被收录于专栏:每天学Java每天学Java

前言

今天本来想写一篇关于Session实现单点登录的文章,写一半的时候,发现自己仍然有些问题是很无法解释清楚的,所以只能自己解决之后再写。而顶级域名下的子域名实现Cookie共享是Session单点问题的一个案例,所以现在抽取出来了解一下。

背景

许多公司都会拥有自己门户网站,如果我们在门户系统点击登录之后,那么我们在进入该公司的其他网站的时候,通常不会重复登录。为什么会这样呢?如果我们细心观察一下的话,我们会发现大多数他们都是拥有相同后缀(二级域名),比如百度,顶级域名是www.baidu.com,而该域名下面(这里是举例,并不一定是这个域名):

BBS网站是:bbs.baidu.com

博客网站是:blog.baidu.com

他们就属于相同的子级域名。

实现方案

如果你没有那么多服务器,也没有域名,那么测试这种效果就需要一些特殊的操作:修改hosts文件(他的作用,这里就不说了) 我这里增加了两行 ,指向IP:127.0.0.1

127.0.0.1 sso.java.net

127.0.0.1 bbs.java.net

然后我们搭建两个项目,SSO和BBS,对应上面不同的域名,因为Cookie是以域名来进行隔离的,所以仅仅是端口号不同,不足以验证Cookie共享的效果。

我们在SSO的项目中增加下面的代码:

代码语言:javascript
复制
response.addCookie(token);

然后我们访问这个接口,如下图

我们可以看到token这个字段,和jsessionid(关于jsessionid本来是今天要聊的,因为中间测试出了一些自己很疑惑的问题,所以下次再说)。

然后我们访问bbs项目,这里我们单纯写一个接口就可以了:

代码语言:javascript
复制
@RequestMapping("testSession")
@ResponseBody
public boolean testSession() {

    return true;
}

然后我们访问bbs.java.net:81的项目,可以如下图

我们可以看到他们token已经到bbs.java.net这个域名下了,且于sso.java.net是相同的值。目前这种方式在很多企业仍然被采用,因为cookie的共享,也就实现单点登录。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 背景
  • 实现方案
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档