HTTP 是无状态,无状态是指协议对于事务处理没有记忆能力,不能保存每次客户端提 交的信息,即当服务器返回应答之后,这次事务的所有信息就都丢掉了。如果用户发来一 个新的请求,服务器也无法知道它是否与上次的请求有联系。为了解决这个问题我们引入了会话跟踪技术, 客户端会话技术:Cookie;服务器端会话技术:Session
Cookie 并不是它的原意“小饼干”的意思,而是一个保存在客户机中的简单的文本文件,这个文件与特定的 Web 文档关联在一起,保存了该客户机访问这个 Web 文档时的信息,当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性,因此它可以帮助我们实现记录用户个人信息的功能。 一个 Web 站点可能会为每一个访问者产生一个唯一的ID,然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web,会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名,就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存)。
☞ 创建 Cookie 对象
// 创建Cookie对象,绑定数据
Cookie cookie = new Cookie(String name, String value)
☞ 添加 Cookie
// 将 Cookie 添加到 response 中,一起返回给浏览器
response.addCookie(Cookie cookie)
☞ 获取 Cookie
// 可能有多个值,返回 Cookie[]
request.getCookies()
☞ Cookie 有存活时常
Cookie 具有存活时常,不设置的话默认是临时存储,即默认会话结束销毁。可以使用 setMaxAge(sconds)
来设置 Cookie 的存活时常,正数:存活秒数。写出到硬盘存储,到期自动删除,最大为 int 表示的最大值(68年左右);负数:默认。Cookie 保存在内存中;0:立即删除。
☞ Cookie 内存大小受限制
Cookie 有个数和大小的限制,一般每个域名 Cookie 限制为 20 个,大小为 4K
IE 6.0 | IE 7.0 / 8.0 | Opera | Firefox | Safari | Chrome | |
---|---|---|---|---|---|---|
Cookie 个数 | 每域 20 个 | 每域 50 个 | 每域 30 个 | 每域 50 个 | 没有个数限制 | 每域 53 个 |
Cookie 总大小 | 4095 字节 | 4095 字节 | 4096 字节 | 4097 字节 | 4097 字节 | 4097 字节 |
Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。 当程序需要为某个客户端的请求创建一个 Session 时,服务器首先检查这个客户端的请求里是否已包含了一个 Session 标识即 SessionId,如果已包含则说明以前已经为此客户端创建过 Session,服务器就按照 SessionId 把这个 Session 检索出来使用,检索不到,会新建一个,如果客户端请求不包含SessionId,则为此客户端创建一个 Session 并且生成一个与此 Session 相关联的 SessionId,SessionId的值是一个独一无二的字符串,这个 SessionId 将被在本次响应中返回给客户端保存。
☞ 获取 Session 对象
HttpSession session = request.getSession();
☞ 获取值
session.getAttribute(String name)
☞ 设置值
session.setAttribute(String name, Object value)
☞ 删除值
session.removeAttribute(String name)
☞ 其他方法
// 获取 sessionId
session.getId();
// 设置 session 过期时间
session.setMaxInactiveInterval(sconds);
// 销毁session的方法
session.invalidate();
// 获得 session 的创建时间
session.getCreationTime();
// 获得 session 最后一次被使用的时间
session.getLastAccessedTime();
☞ Session 的存活时常 Session 依赖于 Cookie,窗口关闭 Cookie 销毁后 Session 无法使用;Session 默认半小时内没有再次链接时销毁。
① Cookie 存储在客户端,易被篡改 ② Cookie 只要 Cookie 不被销毁则可以在多次请求多次连接共享数据 ③ Cookie 有大小限制和数量限制
① Session 存储在服务器,相对安全 ② Session 理论没有存储限制 ③ 只要 Cookie 和 Session 不被销毁则在可以多次请求多次连接共享数据