会话介绍
- 会话: 就是浏览器和服务器之间的多次请求和响应
- 为了实现一些功能,浏览器和服务器之间可能产生多次的请求和响应, 从浏览器访问服务器开始, 到访问服务器结束(关闭浏览器,到了国企时间), 这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话
- 会话过程中产生的一些数据,可以通过会话技术(Cookie和Service)保存
Cookie
Cookie介绍
- Cookie: 客户端会话管理技术
把要共享的数据保存到客户端
每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享
- 作用: 可以保存客户端访问网站的相关内容, 从而保证每次访问时先从本地缓存中获取,以此提高效率
Cookie 属性
image.png
Cookie方法
image.png
Cookie 添加和获取
image.png
Cookie 的使用
- 需求说明:
通过Cookie记录最后访问的时间,并显示在浏览器上- 最终目的:
掌握Cookie的基本使用,从创建到添加客户端,再到从服务器端获取
实现步骤:
1.通过Cookie记录最后访问时间,并在浏览器上显示出来
2.创建Cookie对象,指定name和value
3.设置Cokkie最大存活时间
4.通过响应对象将Cookie对象添加到客户端
5.通过请求对象获取Cookie对象
6.将Cookie对象中的访问时间写出l
实现代码:
@WebServlet("/servletcookie")
//设置映射路径
public class ServletCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 通过响应对象写出提示信息
resp.setContentType("text/html;charset=utf-8"); //设置编码格式
PrintWriter pw = resp.getWriter(); //通过响应头对象创建输出流对象
pw.write("欢迎访问本网站,您最后的访问时间是: <br>"); //给出提示
//2. 创建Cookie对象,用于记录最后访问时间
//注意: 这里value接收的是String类型的字符串,System.currentTimeMillis()返回的是Long类型 + "" 则变成String类型
Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");
//3. 设置Cookie最大存活时间System.currentTimeMillis()
cookie.setMaxAge(3600);
//4. 通过响应对象将Cookie对象添加到客户端
resp.addCookie(cookie);
//5.通过请求对象获取Cookie对象
Cookie[] arr = req.getCookies();
//因为获取的是cookie类型的数组,要得到想要的name属性值,用for+if, 遍历,判断
for (Cookie c : arr) {
if ("time".equals(c.getName())) {
//6.获取cookie对象中的value, 因为value值在设置的时候是Long类型的,拿到的值是String类型
String value = c.getValue();
//如果以具体的时间格式写出需要格式化和转换
//模板格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//写出浏览器上
pw.write(sdf.format(new Date(Long.parseLong(value))));
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Cookie 细节
- 数量限制
每个网站最多只能有20Cookie,且大小不能超过4KB,所有网站的Cookie总数不超过300个- 名称限制
Cookie的名称只能包含ASSCI码表中的字母和数字字符,不能包含逗号,分号,空格,不能以$开头
Cookie的值不支持中文- 存活时间限制,setMaxAge()方法接手数字
负整数: 当前会话有效,浏览器关闭侧清理
0: 表示立即清理
正整数: 以秒为单位设置存活时间- 访问路径限制
默认路径: 取自第一次访问的资源路径前缀,只要以这个路径开头就能访问到(包括子级路径)
设置路径: setPath() 方法设置指定路径