为何要实现会话管理(Session Management)?
通俗地说:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
也就是:用户在一定时间内,对一个Web程序或网站进行多次请求,完成和Web程序和网站的一次交互的过程。
会话管理是跟踪跨 Web 用户活动的过程。
会话管理其实是实现跨页面数据传输。
Http协议是无状态的,每个请求都是独立的,单独和服务器建立连接,这样服务器无法确认两次请求是否是同一个用户,也无法跟踪用户数据和活动。所以需要实现会话管理。
会话管理技术
隐藏表单字段
嵌入到html表单中,在网页上不可见的表单字段
<input type=”hidden” name=”status” value=”团员” >
URL重写
通过修改 URL 以管理用户会话,多是为了提交一些数据给下一个组件(servlet或jsp)。
用于传送非重要信息,因为url在地址栏可见。
Cookie(曲奇饼干)
Cookie是一种客户端的会话管理技术
Cookie由服务器端生成,存放到客户端的小型文本文件,用于存储一些少量的数据
一个Cookie只能存放一项信息,以名称-值对的形式存储数据,名称和值都是字符串。
Cookie和响应一起发送到客户端,Cookie是作为响应报头/标头被发送到客户端,所以必须调用响应对象的addCookie(Cookie c)方法将Cookie对象添加到响应对象,Cookie才会被存到客户端
默认一个Cookie在浏览器关闭后被清除,默认是浏览器会话结束清除Cookie
每个主机只能获取自己存放的Cookie,一个主机/一个域名存放的Cookie只能自己读取,其他主机/域名不能读取这些Cookie,如百度存放的Cookie只能百度读取,网易的Cookie只能网易用。
一旦存放了Cookie,则下次向该程序发送请求的时候,Cookie会跟着请求一起被发送到服务器端。Cookie作为请求的报头和请求一起发送到服务器端。
一个Cookie只能包含一项标记信息,以键-值对的形式存放。
Cookie不安全,容易被攻击或篡改,不宜存放机密数据,cookie信息不应太大,否则发送数据量大,影响传输。Cookie适合存放少量非机密信息在客户端。如访问时间,浏览历史,会话id等
Cookie可被客户端删除或禁用。
Cookie的数量、大小限制等因浏览器而不同。一些浏览器限制每个域名不超过30-50个Cookie,一个Cookie大小不超过4kb,但具体因浏览器不同。
会话技术(会话API)
Session是服务器端技术
服务器在运行时可以为每一个用户浏览器创建一个其独享的session对象,我们可以将一些在会话期间使用的数据放到该session对象(HttpSession类型),实现会话期间数据共享
会话对象以名称/值对的形式存储会话信息,名称通常是字符串,值可以是任何对象, 如字符串,数字,任何实体对象等
session对象是存储在服务器的内存中,在会话超时或调用invalidate方法后被摧毁。但若是服务器突然关闭,则会话数据会消失,这时需要持久化技术的辅助来确保数据不会消失。
一般情况下,session需要cookie技术的支持,因为很多web程序会将session id作为一个cookie存到客户端。如果客户端禁用了Cookie,则就要使用url重写等方式实现session.
Session比cookie相对安全,适合保存机密性信息,但因为存储在服务器端,访问量大的时候,会给服务器造成压力。而且不容易实现多个服务器共享数据.
使会话失效的三种方式
1.调用HttpSession的setMaxInactiveInterval(int time)设置会话的最大部活动时间,单位为秒
2.调用HttpSession的invalidate()方法使会话立刻失效
3.在web.xml文件中使用session-timeout标记配置会话的超时时间,单位是分钟