初识Session
题外话
本来这篇笔记不应该放在这个笔记本组(浏览器)里的,因为Session是服务端的东西,可是Cookie和Session它们俩是密切相关的。提起Cookie那么Session必提,提起Session,Cookie必提。所以为了方便就全部放在这个名为浏览器的笔记本组里了。
和Cookie一样,之前对Session的认识就只会说,Session是在服务端,Cookie在客户端,然后巴拉巴拉的说一大堆Session和Cookie的概念,其实压根就没有用过,只会死背概念罢了
这里来讲一下,现在我对Session的理解,以及用法,全文中的request指的就是HttpServletRequest。
1、对Session的理解
- 什么是Session?
- Session是怎么产生的?
- Session的作用是什么?
什么是Session?
Session和Cookie一样,都是服务器校验客户端的凭证,不过Cookie是客户端自己“带”过来的,而Session是就在服务端产生的,Session中的属性和相应值是键值对的存储方式。
对二者的理解可以打个比方说明:
Cookie相当于客人(客户端)带上主人(服务端)发的请柬去主人家里蹭吃蹭喝
Session相当于客人(客户端)“直接”来主人家(服务端)蹭吃蹭喝,但是主人家里需要拿出可蹭吃蹭喝的“人员名单”来校验,看该客人是否在名单上。
Session是怎么产生的?
和Cookie一样,Session是服务端产生的,产生之后保存在服务端里的一块内存块(每个客户都有一个,相互之间不共享)
客户端在第一次访问服务器的时候,通过request.getSession(true)或request.getSession()生成Session,同时生成一个名为JSESSIONID(只限于tomcat容器)的Cookie(这个是服务端自动生成的,底层封装好了的)
Session的作用是什么?
显而易见的,Session的作用和Cookie一样,都是用于标识客户端的,来识别客户端的一种手段。
2、Session校验客户端流程
- 客户端第一次访问服务器,服务器通过执行request.getSession(true)或者request.getSession()在服务端产生一个Session,同时服务端自动返回给客户端一个名为JSESSIONID的Cookie,该Cookie的Value就是该Session的Id
- 客户端第二次访问服务器会将第一次产生的名为JSESSIONID的Cookie传给服务端,然后根据该Cookie的Value去找到对应的Session (这个步骤不是我们自己代码实现,而是服务器自己实现的)
- 如果在第一步中对产生的Session有通过setAttribute(key,value)塞值,那么在这步就可以通过getAttribute(key)获取Session里的相应属性值来做一些判断。
例子:
3、Session的一些常用属性及相应方法
不做特殊说明的话,下面的属性中的get和set方法是相对应的,有这个属性的set方法,就有这个属性的get方法。
- 超时时间: session.setMaxInactiveInterval(多少秒)
客户端与服务端停止交互的时间叫做超时时间,默认的超时时间是30分钟
- 设置属性值: session.setAttribute(key,value)
还有常见的:
- session.getId():得到session的id。
- session.invalidate():使session失效。