session会话跟踪详解
session会话跟踪详解
最近学了session会话,来说下我对session会话机制的理解吧。
一、session是什么?
session是jsp隐式对象(会话对象)
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。由于web server对每一个客户端请求都没有历史记忆;
session用来保存客户端状态信息;
二、什么是会话(session)跟踪?
首先, HTTP请求是无状态的,通俗点说,就是你打开一个网页,和打开下一个网页之间,没有任何关系, 数据不会保存共用的。 其次, 会话,就是人的对话, 一次会话指从开始聊天到聊天结束, 在这里就是指,你进入一个网站一直访问浏览,直接到你退出这个网站,或者关浏览器, 这是一次会话, 会话跟踪, 就是在你多次访问一个网站之间要保存数据, 多次请求要保存共有的数据,就叫会话跟踪了
三、session ID的作用
当程序需要为某个客户端(浏览器)的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session ID,服务器在响应时,会将Session对象的ID(session ID通过临时Cookie的方式响应给浏览器,浏览器的临时Cookie会存下sessionID,每次请求都会带上sessionID,可以根据这个ID判断是不是同1个用户访问;如果已包含一个session ID,则说明以前已经为此客户端创建过session,服务器就按照session ID把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session ID,则为此客户端创建一个session并且生成一个与此session相关联的session ID,session ID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。
如果有多个浏览器同时请求服务器,服务器会根据SessionID找到对应的浏览器,开不同的浏览器是不同的会话,同一个浏览器是同一个会话
四、HTTP协议与状态保持
-http是无状态(stateless)的通信协议,当客户端发出请求时,服务器才会建立连接,一旦请求结束,服务器变短断开连接
session是解决http协议无状态问题的服务端解决方案,它能让客户端和服务端一系列交互动作变成一个完整的事务,能使网站变成一个真正意义上的软件。
五、 session对象何时被销毁?
session在下列情况下被销毁
1.程序调用HttpSession.invalidate();(销毁服务器上的session对象,重新发起请求时,会认为是一个新的会话,session ID不同)
2.距离上一次收到客户端发送的session ID时间间隔超过了session的超时设置;
3.服务器进程被停止(非持久session)
4.浏览器关闭
六、举例阐述四种会话跟踪技术的特点,应用场景
隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用
1、URL传递参数
url?参数名=值&参数名=值
2、隐藏表单域
3、使用Cookie
保存在客户端的
永久性Cookie 设置了有效时间的,就是永久性的
会以文件的形式保存在浏览器的临时文件夹中
临时性Cookie 当客户端关闭之后,Cookie就没有了
只是保存在浏览器的缓存中
4、使用会话对象session
session的默认失效时间是30分钟
在web.xml中可以配置session的失效时间
<session-config>
<session-timeout>10</session-timeout>
</session-config>
七、Cookie与Session的区别
1.Cookie是存在浏览器中的,Session是存在服务器中的
2.Cookie的安全性要低于Session,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3.Cookie可能会被用户禁用
Session的数据是存在服务器内存中,关掉浏览器,会清空Session
临时性Cookie存在浏览器的缓存中,关掉浏览器,会清空
永久性Cookie是存在临时文件中,到达有效期前,一直存在