Web学习之Session

1,什么是Session

Session一般译为会话,是解决Http协议的无状态问题的方案,可以将一次会话中的数据存储在服务器端的内存中,保证在下一次的会话中可以使用。

在客户端浏览器第一次向服务器端发送请求时,服务器端会为这个客户端创建独有的Session,并具有唯一的Session ID,存储在服务器端的内存中。在客户端第二次访问服务器端时,会携带Session ID在请求中,服务器端会根据Session ID查找对应的Session信息,进行进一步地操作。

在JavaEE中提供了javax.servlet.http.HttpSession接口,通过该接口可以将共享的数据内容存储在HttpSession对象中,从而解决Http协议的无状态问题

2,Session与cookie的区别

Session与Cookie都是解决Http协议的无状态问题,但是两者之间还是存在一定区别的:

  • Cookie数据存储在客户端的浏览器内存中或本地缓存文件中,Session数据存储在服务器端的内存中。
  • Cookie数据存储安全性较低,Session数据存储安全性较高。
  • Session数据存储在服务器端内存中,访问增多时,降低服务器端性能。而Cookie则不会对服务器端性能造成影响。
  • 单个Cookie存储的数据最大是4KB,一个网站只能存储20个Cookie。Session则没有这个问题。
  • Session在关闭浏览器时失效,而持久Cookie则可以存储更长有效时间。

总的来说,Session与Cookie各有优势,不能简单来说谁更优。具体用法要考虑具体案例情况而定。

3,Session的实现原理

在idea中使用上一个程序进行调试,访问servlet并抓取内容,最后发现实际得到的是org.apache.catalina.session.StandardSession对象,该对象是由Tomcat服务器的Session池创建,并为该对象创建唯一的ID值。

 

 最后结论:

因为Session使用的是会话Cookie,所以当浏览器关闭后,Session会失效。重新打开浏览器访问对应Servlet时,服务器端会重新创建Session对象。可以使用持久Cookie来延长Session的有效时间。

3,Session的额生命周期

  • Session的创建:在客户端第一次向服务器端发送请求,并执行request.getSession()方法时。
  • Session的销毁:
    • 不正常关闭浏览器时。(正常关闭浏览器,Session信息被序列化到硬盘中,保存在Tomcat服务器安装目录/work目录)
    • Session信息过期时(Session默认的有效时间为30分钟)。

      可以利用setMaxInactiveInterval(int interval)方法设置Session的有效时间。

    • 在服务器端程序中执行session.invalidate()方法,手动销毁Session对象。

 

摘抄自:https://www.cnblogs.com/aaron911/p/7889353.html

 

由于还在初学阶段,对session的理解还不太透彻,只好通过别人已有的总结来理解session。

 

posted @ 2018-03-25 23:00  babyboss5  阅读(125)  评论(0编辑  收藏  举报