目录
为什么要用Session?
在Web发展中,我们知道浏览器与服务器之间采用的时http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登录,购物车等。
什么是Session?
Session是服务端一种状态保持机制,可以将各种类型数据存储到Session,最终这些数据是存储到服务端的内存中。
从Cookie延申到Session
Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有cookie值,而只传一个唯一的ID,通过这个ID直接在服务器找用户信息呢?答案是有的,这就是Session。
Session是基于Cookie来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登录就保存用户信息)并把这个id通过Cookie存到客户端,客户端每次和服务器交互时只传这个id,就可以事先维持浏览器和服务器的状态
应用场景:
用户登录和登录超时
1.用户登录之后可以访问其他页面,但是如果不用Session验证,那么不法之人就可以通过知道你的地址就可以访问其他页面,所以需要验证是否登录之后才可以访问页面
2.用户在一个界面等待时间过长,到达了Session的过期时间,那么提示用户登录超时
工作流程:
1.用户点击提交,将用户输入的内容提交(以post请求)到aspx页面(服务器端)
2.aspx页面执行代码,当给Session赋值时,那么会存储到服务器的内存中(因为session时服务端状态保持机制,在内存中存储数据时,服务器会开辟Seesion的存储区域,这个区域在分响应的存储单元,并且每个单元加上一个编号,这个编号叫SessionID),当执行到跳转页面代码时,这时服务器会向浏览器返回一个302和location,这时SeesionID会以Cookie的形式返回给浏览器,存储在浏览器的内存中。
3.浏览器接收到服务器返回的数据以后发现时302,那么浏览器会重新向Location指定的页面发送请求,同时将SessionID放在请求报文中,发送到服务端对应的页面中。
Session的销毁(声明周期)
Session的声明周期是从创建到超过过期时间,也就是说,当Session创建后,浏览器关闭,会话级别的Cookie被销毁,如果没有超过设定的时间,该SessionID对应的session是没有被销毁的,但是SessionID没有了,在访问时,就找不到了。如果到了过期时间,那么该SessionID对应的session是被销毁.但是SessionID没有被销毁,直到关闭该浏览器SessionID消失。
- SessionID在关闭浏览器时消失
- SessionID对应的session内容到了过期时间消失,它的生命周期会随着用户的访问而增加
重点:
- 每个用户都有一个单独自己的Session对象
- 由于Session数据是存储在服务端内存中,不要将过大的数据赋值给Session
- 验证码验证成功之后,需要删除该Session,有以下两点原因
- 用户第二次登录的时候,需要重新验证验证码(如果不清除,那么不法之人就可以根据这个验证码,在Session过期时间之内,不断试用户名和密码,就减少了一层安全保护)
- 清除验证码,可以减少服务端内存的占用