•使用HttpServletRequest 的 getSession() 方法创建会话
会话创建好以后,可以使用HttpSession接口进行会话的基本使用
会话保存数据获取会话保存的数据
•HttpSession接口中提供了管理会话的方法
| 方法 | 说明 |
| String getId() | 返回Session 的ID |
| long getCreationTime() | 返回会话被创建的时间 |
| long getLastAccessedTime() | 返回会话最后处理时间 |
| void invalidate() | 使当前的Session失效,此时Servlet容器会释放HttpSession对象占用的资源 |
| void setAttribute(String name, | 将一个名/值对保存在HttpSession对象中 |
| Object getAttribute(String name) | 根据name参数返回保存在HttpSession 对象中的属性值 |
•HttpServletRequest接口提供的管理会话的方法
| 方法 | 说明 |
| String getRequestSessionId() | 返回与客户端请求相关的Session 的ID。可能与当前的会话ID相同,也可能不相同 |
| boolean isRequestedSessionIdFromcookie() | 会话ID是由cookie返回的,就返回true |
| boolean isRequestedSessionIdFromURL() | 会话ID是由重写URL返回的,就返回true |
| boolean isRequestedSessionIdValid() | 如果客户端的会话ID代表的是有效会话,就返回true。会话是无效的,则返回false |
session对象的生命周期
• session 的创建 • 浏览器访问服务器时,服务器为每个浏览器创建不同的 session 对象 • session 的关闭 • 调用 session. invalidate() 方法 , 使 session 对象失效 • 访问时间间隔大于非活动时间间隔, session 对象失效 • 关闭浏览器时, session 对象失效会话跟踪技术
• 会话跟踪技术允许服务器确定访问站点的用户、用户访问站点的次数和用户停留站点的时间段 • 客户端和服务器之间的会话 ID 和状态信息,通常有四种方法: • 使用 Servlet API 中的 Session 会话机制(存储在 Web 服务器) • 使用 cookie (存储在客户端浏览器) • URL 重写 :URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字 / 值对•隐藏表单域:,非常适合步需要大量数据存储的会话应用
什么是cookie?
• cookie 的本意是“小甜饼”,我们俗称“曲奇饼” • 在 JavaWeb 中, cookie 是 HTTP 客户端和 HTTP 服务器之间传送的小块信息,用这类信息将状态添加到无状态的 HTTP 协议中 • 当 HTTP 服务器收到一个请求时,除了被请求的文档外,服务器还会选择返回一些状态信息给客户的浏览器 • 这些状态信息应该由支持 cookie 的客户端存储起来,放在客户端的机器里面 • 客户端任何时候再发送新的请求给服务器,都要首先检查请求的 URL 和所存的 cookies 中的 URL 是否对应Servlet API中提供了cookie类来实现cookie,并定义了添加cookie和获取cookie的方法
| 方法 | 说明 |
| void setMaxAge(int expiry) | 设置cookie的最大保存时间,单位秒,正值表示经过设定的秒值后,cookie将过期。负值表示不在客户机上保存cookie,如果用户关闭浏览器时,cookie会被删除,默认设置。0值表示删除现有的cookie |
| int getMaxAge() | 返回以秒表示的cookie的最大保存时间 |
| String getName() | 返回在构造方法里为cookie设置的名字 |
| void setValue(String newVal) | 给cookie赋值,设置名/值对中值的部分 |
| String getValue() | 返回cookie名/值对中值的部分 |
禁用cookie
• cookie 是存放在客户端的机器上面,如果客户端的浏览器出于安全方法的考虑,在浏览器的隐私设置中阻止了所有的 cookie • 服务器就没有办法把一些信息写入到客户端,使用 cookie 就没有用了cookie禁用之解决方法-URL重写
1)Java Servlet API 中为我们提供了会话跟踪的另一种机制,通常的做法是重写客户请求的 URL ,把 Session ID 添加到 URL 信息中 2)URL 重写其实就是在 URL 后面加上一个 jsessionid 参数, jsessionid 的参数值是唯一的,所以可以跟踪某一会话3)HttpServletResponse接口中提供了2种URL重写的方法
| 方法 | 说明 |
| String encodeURL(String url) | 重写给定的 url,包含Session ID |
| String encodeRedirectURL(String url) | 使用sendRedirect方法时,重写给定的 url,包含Session ID |
隐藏表单域
• 隐藏 HTML 表单域通常是用来存储状态信息 • 隐藏的变量操作就像 HTML 输入域一样,提交页面给服务器时,把该隐藏域的名 / 值对传给服务器 • 客户端的页面是不能看到或是修改隐藏的 HTML 变量的值 总结: • Servlet API 中使用 HttpSession 和 cookie 来跟踪客户的状态 • getSession 方法返回与客户端请求绑定的会话对象•会话跟踪的4大技术分别是:使用Session和cookie、URL重写、隐藏表单域



