一、Session是什么意思
session在计算机中,尤其是在网络应用中,称为"会话控制"。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。注意会话状态仅在支持Cookie的浏览器中保留。
其次,Session是一个英语单词,意思有开会、会议等。
二、Session的工作原理
Session内容保存在服务器端的,通常是保存在内存中,当然也可以保存在文件、数据库等等。客户端跟服务器端通过SessionId来关联,SessionId通常以cookie的形式存储在客户端。每次HTTP请求,SessionId都会随着Cookie被传递到服务器端,这行就可以通过SessionId取到对应的信息,来判断这个请求来自于哪个客户端/用户。
1、用户靠前次请求服务器时,服务器端会生成一个sessionid;
2、服务器端将生成的sessionid返回给客户端,通过set-cookie;
3、客户端收到sessionid会将它保存在cookie中,当客户端再次访问服务端时会带上这个sessionid;
4、当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionid,不存在就新建一个sessionid重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionid相对应的文件,文件中的键值便是sessionid,值为当前用户的一些信息;
5、此后的请求都会交换这个 Session ID,进行有状态的会话。
Session的工作原理
三、Session的特点
1、session保存的位置是在服务端;
2、session一般来说要配合cookie使用,如果用户浏览器禁用了cookie,那么只能使用URL重写来实现session的存储功能;
3、单纯的使用session来存储用户回话信息,那么当用户量较多时,session文件数量会很多,会存在session查询慢的问题。
本质上:session技术就是一种基于后端有别于数据库的临时存储技术。
四、Session的生命周期
1、Session何时生效
Sessinon在用户访问靠前次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问Html、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
2、Session使用过程
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session"活跃"了一次。
3、Session何时失效
服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。从session不活动的时候开始计算,如果session一直活动,session就总不会过期。从该Session未被访问,开始计时;一旦Session被访问,计时清零。关闭浏览器,session就会失效。
五、Session的性能瓶颈
通常情况下,如果你不明确的设置,大多数Web框架会把Session数据存放到内存中。如果你的Web应用用户量不大的话,这也不成问题。但如果你的用户数比较大的话,就可能发生一个事情—内存不够用了。这很正常,内存容量是非常宝贵的,假设每个用户的Session数据是100K,1万个用户就会大概占用1G的存储空间,如果你的Session数据清理机制也恰巧比较慢的话,内存非常容易被占满。这就需要你在设计比较大并发量的站点时,要考虑Session的存储方式,比如把它们保存到硬盘文件系统中,或者数据库中。所以你在开发一个Web应用的时候,如果你的用户量很大,你需要有这个意识。另外Session放到内存中还有一个弊端,如果你的Web服务器发生重启,那么所有的Session状态都会被情况,会在一定程度上影响用户体验。
六、Session和Cookie的区别
1、存储位置不同
cookie的数据信息存放在客户端浏览器上;session的数据信息存放在服务器上。
2、存储容量不同
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
3、存储方式不同
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
4、隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。
5、有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
6、服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
7、浏览器支持不同
假如客户端浏览器不支持cookie:cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。
假如客户端支持cookie:cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。
session只能在本窗口以及子窗口内有效。
8、跨域支持上不同
cookie支持跨域名访问;session不支持跨域名访问。
七、Session注意事项
1、Session中保存的数据的大小要考虑到存储上线不论是内存还是数据库;
2、Session中不要存储不可恢复的内容;
3、依赖Session的关键业务一定要确保客户端开启了Cookie;
4、注意Session的过期时间;
5、在负载均衡的情况下,由于存在Web服务器内存中的Session无法共享,通常需要重写Session的实现。
6、每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简;
八、Session常见问题
1、为什么要使用session
Session对象是一种会话对象,用来记录每个客户端的访问状态,其实,HTTP协议是一种无状态协议,也就是客户端向服务器发送一个请求request,然后服务器返回一个相应response,之后这个连接就会被关闭,两者也没有任何关系了,也就是服务器中不会存储此次请求的有关信息,再次请求时服务器就无法知道这次请求和上次请求是否是一个客户了。所以就需要采用会话session来记录这次连接的信息了。
2、Session为什么会丢失
Session内容的丢失都是有原因的,通常都是由于Web服务器的重启造成的,比如IIS、Tomcat的重启。
3、使session失效的方法都有什么
关闭tomcat;重启web应用;session时间到;无效的session。
4、session的主要作用是什么
存储会话信息供浏览器后续请求使用,可以获取并修改变量的值。和cookie一起使用识别同一个客户。
总结
优化猩SEO:Session是用来标识用户的,用户请求什么资源,服务器就会把资源给该请求所带的Sessionid对应的用户,Session可以做登录、访问控制,数据传递,用户识别等。
TAG:session是啥