Http协议是基于请求/响应模式、无状态的协议;全部请求时相互独立的、无连续的;服务器没法记住与识别用户。web
对于简单的页面浏览或信息获取,http协议能够彻底胜任;对于须要提供客户端和服务器端交互的网络应用则必须记住客户端状态。浏览器
会话就是一个接二连三的在在客户端和服务器端进行请求响应的一系列交互。服务器
会话跟踪就是在这些请求和响应中维护须要的数据信息,使得这些相关的请求和响应获得正确的运做。cookie
会话的实现过程:网络
- 当服务器端接收到客户端的首次请求时,服务器初始化一个会话并分配给该会话一个惟一标识符
- 在之后的请求中,客户端必须将惟一标识符包在请求中,服务器根据此标识符将请求与对应的会话联系起来。
实现会话跟踪的技术:session
- 使用Cookie:全部的Http消息,无论是请求仍是响应均包含头信息,由浏览器存储在客户端机器上的头信息就称做Cookie,以“属性=属性值;..”方式组成的文本信息;优势:简单性、基于文本的key-value对
- 建立Cookie : //Cookie c =new Cookie("userId","a1234");
- 设置最大时效:c.setMaxAge(60*60*24*7);
- 把cookie放入到http响应中:response.addCookie(c);
- 从客户端读取cookie:Cookie[] cookies=request.getCookies(); if(cookies!=null){for(int i =0;i<cookies.length;i++){Cookie cookie =cookies[i]; if(cookieName.equals(cookie.getName())){//do something with(codeValue)}}}
- cookie的属性:
- getMaxAge(); //设置cookie到期时间
- getName(); //读取cookie的名称
- getValue(); //读取/设置与cookie关联的值
- URL重写:
- 优势:必须对全部指向您的网站的url进行编码;全部页面必须动态生成;不能使用预先记录下来的url进行访问
- 缺点:cookie被禁用或者根本不支持的状况下依旧可以功能
- 隐藏的表单域
- <input type="hidden" name="session" value="..."/>
- 优势:cookie被禁用或者根本不支持的状况下依旧可以工做。
- 缺点:全部的页面必须是表单提交以后的结果。
- 会话对象生存于服务器上;会话自动经过cookie或url重写与客户关联起来,容许咱们将任何对象存储到会话中
- HttpSession
- servlet容器提供httpsession接口来表明客户端和服务器端的会话;当一个Servlet容器为客户端开始一个会话时,建立一个新的HttpSession对象,除了表明会话外,httpSession对象还能够用于存储与会话相关的信息
- httpSession会话跟踪基础:
- 访问会话对象,request.getSession();
- getAttribute
- setAttribute
- removeAttribute,invalidate
会话失效:网站
经过web.xml的<session-timeout>,由程序来结束会话httpSession接口提供了invalidate()编码