【Java基础】Session跨域

之前项目中涉及到跨域问题(2个不同的域名访问同一个服务器)造成session丢失的问题,请求分发用的是nginx

总结了以下,常用的session处理方式有以下几种

ip_hash

【概念】当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上

upstream myproject {
    ip_hash;
    server 192.168.40.31:8070 //down 将服务器移除负载
    server 192.168.40.16:8080; 
}

【缺点】使用ip_hash指令无法保证后端服务器的负载均衡,可能有些后端服务器接收的请求多,有些后端服务器收到的请求少,而且设置后端服务权重等方法将不起作用

关于ip_hash

session共享

第三方存储

【思路】把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中。那么问题又来了,如何替换掉Servlet容器创建和管理HttpSession的实现呢?(HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的)

方法
1). 设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作(SpringSession)

Spring Session提供了一套创建和管理Servlet HttpSession的方案。Spring Session提供了集群Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题

参考
spring-session
spring-session-官方英文文档
spring-session-csdn-blog

2). 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略(需要耦合Tomcat/Jetty等Servlet容器的代码)

参考(基于tomcat6或者7)
tomcat-redis-manager
tomcat-memcached-manager

session复制

与服务器有关
参考
tomcat中文文档
tomcat官方英文文档

http 无状态 token

百度百科(什么是无状态协议)
OAuth2文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值