SSO相关核心技术

一、Cookie原理

当客户端首次请求服务端时,服务端请求Cookie的JSESSIONID的KEY值。
由于HTTP协议是无记忆协议,由Web容器管理所属上下文环境Cookie(类似于JAVA中内存中维护Map结构)

每次请求时,容器会把客户端Cookie传送至服务器,由容器所管理结来查找对应数据。 响应Cookie由服务端向客户端传送数据。

二、Cookie分类

(Request Cookie)请求Cookie。
(Response Cookie)响应Cookie。

三、认识Cookie

Cookie的数据结构类似于HashMap结构一样,主要是Key和Value形式。
属性包括:
Name属性 = 值 即(key =value关系)Cookie名称和值。

Expires属性 = 值 即Cookie失效时间(毫秒)。

Domain属性 = 值。即该Cookie所在域范畴。

Path属性 = 值 即该Cookie所在域下路径范畴。

HttpOnly属性 Secure属性。

即指该Cookie只能在HTTPS协议下有效,HTTP协议下不可用。
注解说明:
① Domian和Path属性就决定该Cookie有效范围,只有相同Domian和Path该Cookie才会被传送。Domain相同而path不同不会传送Cookie。Path相同而Domain不同也不会传送Cookie。

② HttpOnly属性,
如果该Cookie指定为HttpOnly的话,网络传输是有效,但不JavaScript无法读取到该Cookie值,
类似于生成JSESSIONID。

四、JS脚本操作Cookie
1)获取Cookie

//获取所有
cookie var cookies = document.cookie;

2)写Cookie

document.cookie = “c3=test3”;

3)遍历Cookie

// 获取cookie值c1=test1; c2=%12%34%56%78%33%aba%20bc
//escape Js处理转码工作
//unescape Js处理解码工作
var cookies = document.cookie.split(“;”);
for (var i = 0, len = cookies.length; i < len; ++i) {
var cookie = cookies[i].split(“=”);
if (name === trim(cookie[0])) {
return unescape(trim(cookie[1]));
}
}

4)添加Cookie

//添加Cookie
//@param name 名称
//@param value 值
//@param expiresDay 失效时间(单位/天)
//@param domain 域
//@param path 域下路径
//@param isSecure https协议
function addCookie(name, value, expiresDay, domain, path, isSecure) {

    var tmp = name + "=" + escape(value);

	if (expiresDay) {
		var d = new Date().getTime();
		d += expiresDay * 24 * 60 * 60 * 1000;
		tmp += ";expires=" + new Date(d).toGMTString();
	} 
	
	if (domain) {
		tmp += ";domain=" + domain;
	}
	
	if (path) {
		tmp += ";path=" + path;

	if (isSecure) {
		tmp += ";secure";
	}
	
	document.cookie = tmp;

}

5)获取Cookie

//获取Cookie
//@param name 名称
function getCookie(name) {
		if(null == name || "" == name) {
					return null;
}		
var cookies = document.cookie.split(";");
	for (var i = 0, len = cookies.length; i < len; ++i) {
		var cookie = cookies[i].split("=");
		if (name === trim(cookie[0])) {
			return unescape(trim(cookie[1]));
		}
	}
	return null;
}

6)删除Cookie

//删除Cookie(指定cookie失效时间,并未真实删除)
//@param name 名称
function delCookie(name) {
	document.cookie = name + "="";expires=" + new Date(0).toGMTString();	}
	
// 去前后空格 
function trim(str) { 
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

五、JAVA程序操作Cookie

1)获取Cookie

	Cookie[] cookies = request.getCookies();

2)遍历Cookie

	  if (cookies != null) {
		  for (Cookie cookie : cookies) {
			System.out.println();
			System.out.println("Name属性:" + cookie.getName());
			System.out.println("Name对value值:" + cookie.getValue());
			System.out.println("MaxAge属性:" + cookie.getMaxAge());
			System.out.println("Domain属性:" + cookie.getDomain());
			System.out.println("Path属性:" + cookie.getPath());
			System.out.println("HttpOnly属性:" + cookie.isHttpOnly());
			System.out.println("Secure属性:" + cookie.getSecure());
			System.out.println();
		  }

}

  1. 写Cookie

    // name & value
    Random random = new Random();
    Cookie cookie = new Cookie("mycookie", random.nextInt(999999) + ""); 
    
    // expires 失效时间(毫秒), -1代表失效
    // maxAge 失效时间(秒), 24 * 60 * 60代表24小时
    cookie.setMaxAge(-1000); 
    
    // Domain 域属性
    cookie.setDomain("www.baidu.com");
    
    // Path 域下路径属性
    cookie.setPath("/path2"); 
    
    // HttpOnly JavaScript不能处理
    cookie.setHttpOnly(false);  
    
    // Secure 如果为true,仅支持HTTPS协议
    cookie.setSecure(false); 
        
    // 设置响应Cookie值
    response.addCookie(cookie);
    
  2. 删除Cookie

    // expires:一个过去的时间
    cookie.setMaxAge(-1); 
    

六、Cookie使用注意事项

1)过多过大的cookie浪费网络流量。

2)浏览器对cookie有个数限制。

3)浏览器对cookie有大小限制。

4)Cookie不要存储敏感信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值