7、Cookie 、Session
7.1 会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
有状态会话:
一个网站,怎么证明你来过?
- 1.服务端给客户端一个cookie,客户端下次访问服务端带上cookie就可以了,
- 2.服务器等你你来过了,下次来匹配就好了Session
7.2保存会话的两种技术
cookie(了解,一般使用session)
- 客户端技术(响应,请求)
- 一般会保存在本地的 用户目录下 appdata
- 一个网站cookie存在上限
session(重点)
- 服务器技术,利用这个技术,还可以保存用户的会话信息到Session中(在tomcat服务器),
常见:网站登入后,接下来指定的一段时间内,可以不用再次登入
7.4Session(重点)
什么是session:
- 服务器会给每个用户(浏览器)创建一个Session对象
- 一个Session独占一个浏览器,只要浏览器没关闭,这个Session对象就会存在
Session和Cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- Session把用户的数据写到用户独占Session中,服务端保存(保存重要信息,减少服务器资源浪费)
- Session对象由服务器产生
- 用户拿到cookie中的sessionid,底层原理和Cookie相同,只是数据存在了服务器中
使用场景:
- 保存一个登入用户的信息
- 购物车信息
- 在整个网站中经常会使用的数据,我们将它保存在Session中
- 由于服务器关闭,session会自动失效,因此一般是通过流来保存到文件里
使用session
- 解决乱码
- 得到Session
- 存入数据
- 获取Session id
- session的源来
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = req.getSession();
//给session存入数据
session.setAttribute("person",new Person("王叔",21));
//获取sessoin的id
String id = session.getId();
//判断session是不是新创建的
if(session.isNew()){
resp.getWriter().print("session创建成功,ID:"+id);
}
else{
resp.getWriter().print("session已创建,ID:"+id);
System.out.println("session已创建,ID:"+id);
}
//session在浏览器访问服务器时 创建是做了什么?
// Cookie cookie = new Cookie("JSESSIONID",id);
// resp.addCookie(cookie);
}
- 获取session信息
//得到session
HttpSession session = req.getSession();
//获取session的信息
Person person = (Person) session.getAttribute("person");
resp.getWriter().print(person.toString());
System.out.println(person.toString());
- 删除session元素,或注销session
//删除session内的元素
session.removeAttribute("person");
//注销session后,服务器会立刻新建一个
session.invalidate();
- session失效时间
<!-- 设置session默认的失效时间-->
<session-config>
<!-- 15分钟后session自动失效,换个新的-->
<session-timeout>15</session-timeout>
</session-config>