Session

session:会话

   1、有始有终的一系列动作、消息:浏览器窗口从打开到关闭期间

   2、在客户端和服务器间保持状态的解决方案

   3、这种解决方案的存储结构:把*保存到session里

   面向连接:通信双方通信前建立通信渠道

   保持状态:通信的一方能把一系列消息关联起来,消息间互相依赖

cookie:

  包含:名字 值 过期时间  路径和域

  通http协议分发,服务器在http响应头加一行特殊指示提示浏览器生成cookie;JavaScript VBScript 也可生成cookie

  

区别:

session存在服务器端,客户端不知道;cookie存在客户端,服务器知道

session存对象,cookie存字符串

session不区分路径;cookie区分路径,同一网站不同路径下的cookie互访不到

session借助cookie

 

session机制:

   服务器端机制,当程序需要为某个客户端的请求创建一个session的时,服务器检查客户端请求是否已包含session标识 - 称为session id,如已包含session id则已为此客户端创建过session,按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如请求不包含session id,为此客户端创建session并生成与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 

    存session id的方式可采用cookie,如被禁,可通URL重写(附url后:1 路径的附加信息、2查询字符串附加)表单隐藏技术

 

javax.servlet.http.HttpSession 

  Java平台对session机制的实现规范,接口

  一般session存在内存里,服务器进程停止、重启,内存清;如果设置持久化,存硬盘

 

常见问题

  session何时创建

    server程序调用HttpServletRequest.getSession(true),不使用,jsp中关闭,默认使用

何时被删除:

  1、 程序调用HttpSession.invalidate();     2 、到期       3、服务器进程被停止

HttpSessionListener

  监控session的创建和销毁事件,session的创建和销毁动作触发listener

如何防止用户打开两个浏览器窗口操作导致的session混乱 

 通过设置客户端的令牌来解决,服务器每次生成不同的id给客户端的同时保存在session里,客户端提交表单时必须把这个id也返给服务器,程序首先比较id,不一致说明已经提交过了;不要再window.open打开的窗口中做修改操作(一般不设置id)

 

跨应用程序的session共享 

 

terracotta:分布式Java集群技术

配置文件、共享、细粒度

中心辐射的架构,懒加载细粒度拷贝、线性扩展:序列化对象消耗降低、提高cpu使用率、内存无缝隙线性扩展:zk

在这种架构里运行着分布式应用程序的JVM们在启动时都会与一台中心Terracotta服务器相连,Terracotta服务器负责存储DSO对象数据,协调JVM之间的并发线程,Terracotta库位于应用程序JVM中,在类加载过程中,它们用来对类的字节码进行增强,处理同步块内的lock和unlock请求,处理应用JVM之间的wait(),notify()请求,处理运行时和Terracotta服务器的联系等等

 

能做:

DSO频繁访问的重要数据缓存在TCServer上,供集群不同jvm共享

http session复制、spring security整合、hibernate整合、分布式缓存(整合ehcache quartz)

POJO集群:spring框架引入,bean可分布式集群,无缝扩展web系统,故障转移机制

跨集群jvm实现分布式应用程序协调(代码注入)TCServer可配置成集群 高可用

 

为啥:

不改变代码提供HA HP优秀解决方案

1、sessino数据的共享,不使用广播机制,避免了Java序列化,只把被修改的字段的数据传递给服务器和使用节点,大大减少CPU和内存消耗

2、利用服务器实现网络扩展内存,使得有限内存的客户端节点可以访问远大于其内存容量的数据结构,而不必担心发生内存溢出的异常

3、数据保存在服务器端,因此客户端JVM宕机不会造成数据丢失

4、增量数据传递,智能数据推送,最大限度减少对网络的负担,使得客户端JVM可以横向扩展

5、服务器分片,实现服务器数据存储及数据吞吐量横向扩展

6、通过服务器实现共享数据持久化,通过服务器集群实现容错等

7、 无需学习新的API,大大降低开发成本

8、 广泛支持各种应用服务器:WebLogic, WebSphere, Tomcat, JBoss, Jetty, Geronimo等等,自动session数据迁移,集群范围内数据可视以及强大的管理和监控功能界面,大大方便对整合集群的共享数据、性能数据、软硬件指标等的实施监控、调试、优化(通过JMX开放服务器监控信息)

 

注入与字节码

配置文件配置后,程序类加载到jvm时,通过字节码增强技术偷偷注入分布式集群行为

类的字节码在加载时由terracotta进行解析和检查,字节码传递到jvm重新构造一个类:此前字节码据配置被修改

 

ROOT 集群对象图

集群从共享对象的根开始,root可通过配置文件中的*域进行配置,当一个root被实例化,该对象及其所能到达的all对象变集群对象,各域对象数据传递到服务器由其存储,terracotta客户端从服务器获取root对象,本地堆实例化、将引用付给对应域,透明进行

细粒度更改复制

将变化的DSO对象发送到特定的JVM上(含在jvm堆上实例化了的terracotta对象)原子性

 

对象的标识和序列化

对象变化记录局限在对象域层次且只含DSO片段,变化:发送对象ID 域ID 含变化字段的字节( 保持对象唯一性)

对某个DSO,任何给定时刻一个jvm在堆中只拥有一个对他的实例引用,多个jvm间分享和同步对象

 

虚拟堆 网络内存

共享对象图不能够放在单个jvm堆中,保持分布式对象图的配置窗口,超过阈值按策略flush out,使用时从服务器中取出放jvm堆中

https://www.cnblogs.com/albertwx/p/5757768.html

https://www.cnblogs.com/qin-derella/p/6808436.html

https://blog.csdn.net/u010164936/article/details/56666285 Tomcat配置还是比较详细的

https://www.cnblogs.com/study-everyday/p/7853145.html

参考:

https://www.cnblogs.com/lonelydreamer/p/6169469.html

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值