session机制及session的应用

来源:互联网 发布:2017年女声网络红歌 编辑:程序博客网 时间:2024/05/22 23:00

session简介

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。需要注意只有第一次访问JSP、Servlet等程序时才会创建Session,访问HTML、IMAGE等静态资源并不会创建Session。Session生成后,只要用户继续访问,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。服务器就会更新Session的最后访问时间,并维护该Session。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了,默认的过期时间是30分钟。

cookie与session的关系

关系

服务端的session的实现对客户端的cookie有依赖关系的,上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie,因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?Java Web提供了另一种解决方案:URL地址重写。

比较

cookie存储在客户端,session存储在服务器端。也因此:cookie相对来说不如session安全

cookie存储大小和数量有限制,session理论上是无限制的。

cookie的销毁:默认为关闭浏览器,设置过期时间后则过期后就会销毁,

session的销毁:某个请求周期内调用了Session.invalidate()方法,session被销毁;或者是session超时后自动销毁;或者客户端关掉浏览器。

java操作session

HttpSession session = request.getSession(); session.setAttribute("key", value); session.getAttribute("key"); session.removeAttribute("key"); session.setMaxInactiveInterval(60);//单位为秒session.invalidate(); //删除所有session中保存的键

集群环境中session共享问题

1) session的存储应该独立于web容器,也要独立于部署web容器的服务器;
2)如何进行高效的session同步。
在讲到解决这些问题之前,我们首先要考虑下session如何存储才是高效,是存在内存、文件还是数据库了?文件和数据库的存储方式都是将session的数据固化到硬盘上,操作硬盘的方式就是IO,IO操作的效率是远远低于操作内存的数据,因此文件和数据库存储方式是不可取的,所以将session数据存储到内存是最佳的选择。因此最好的解决方案就是使用分布式缓存技术,例如:memcached和redis,将session信息的存储独立出来也是解决session同步问题的方法。
Tomcat的session同步也有使用memcache的解决方案,大家可以参加下面的文章:
tomcat集群session同步之memcache方案
但是该方案只是解决了同步问题,session机制任然和web容器紧耦合,我们需要一个高效、可扩展的解决方案,那么我们就应该不是简单的把session独立出来存储而是设计一个完全独立的session机制,它既能给每个web应用提供session的功能又可以实现session同步,下面是一篇用zookeeper实现的分布式session方案:
基于ZooKeeper的分布式Session实现
0 0
原创粉丝点击