Http协议是无状态无连接的,因此一个用户在一个网站做连续操作需要不断提供身份信息,因此便有了Session与Cookie。
Session:
服务器进行描述用户身份信息的方式(服务器端)
当用户第一次访问浏览器时,浏览器发送请求给服务器,服务器便会自动生成一个Session和一个Session ID 用来标志该Session。并且通过其响应浏览器。当该用户第二次访问时,浏览器发出请求并发出该Session ID(Session ID存储在Cookie中),服务器便会根据这个Session ID找到该用户对用的Session。
Session可存储任何类型的数据
当浏览器支持Cookie时,Session仅本窗口及其子窗口有效;
当浏览器不支持Cookie时,运行Session需要使用URL地址重写的方式,将SessionID直接加在URL路径后面,否则Session无效;
- 创建HttpSession的代码示例如下:
//返回当前的HttpSession,如果没有,创建一个
HttpSession httpSession = req.getSession();
//返回当前的HttpSession,如果没有,返回null
HttpSession httpSession = req.getSession(false);
//返回当前的HttpSession,如果没有,创建一个
HttpSession httpSession = req.getSession(true);
- HttpSession赋值代码示例如下:
//setAttribute方法中第一个参数是String类型作为key,第二个参数是Object类型作为value
httpSession.setAttribute("city","xian");
httpSession.setAttribute("location","LinTong");
Cookie:
仅浏览器存储数据的一种方式(客户端)
Cookies是Session对象的一种,但其不会占用服务器资源,Cookie将所有数据保存在浏览器端,只要不关闭浏览器则Cookie变量一直有效,能够保证长时间不掉线。Cookie作为HTTP header的一部分,其传输由HTTP协议控制,此外,可以控制Cookies的有效时间。浏览器通常支持每个网站高达20个Cookies。每个用户有自己独立的存储Cookies的空间,互相独立。单个Cookie的大小有限仅能存放4kb左右的数据
- 生成Cookies
//创建Cookie
Cookie cookie = new Cookie("city", "xian");
//HTTP响应时会将Cookie信息返回给浏览器
resp.addCookie(cookie);
- 获取Cookies
Cookie[] cookies = req.getCookies();
Cookie cityCookie = null;
if (cookies != null) {
for (Cookie c : cookies) {
if (c.getName().equals("city")) {
cityCookie = c;
}
}
}
String cityName = cityCookie != null ? cityCookie.getName() : "";
- 删除Cookies
Cookie rmCookie = new Cookie("city", "");
//存活时间0秒,即设置cookie立即过期,也就是删除
rmCookie.setMaxAge(0);
resp.addCookie(rmCookie);