当前位置:   article > 正文

SSO相关核心技术_sso 常用技术

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

}

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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, "");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

五、JAVA程序操作Cookie

1)获取Cookie

	Cookie[] cookies = request.getCookies();
  • 1

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

}

  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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  2. 删除Cookie

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

六、Cookie使用注意事项

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/564380
推荐阅读
相关标签
  

闽ICP备14008679号