1、会话技术
- 会话指的是客户端浏览器和服务端之间的度偶次请求和响应
- 当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。就像打电话只要不挂电话就是一次会话。
- 会话过程中产生的数据可以通过会话技术
Cookie
、Session
保存
最常见的场景就是购物车
2、Cookie
客户端会话技术
-
把要共享的数据保存到客户端,每次请求,把会话信息带到服务器,从而实现多次请求的数据共享
-
可以保存客户端访问网站的相关内容,从而保证每次访问都先从本地缓存中获取,提高效率
3、常见属性
属性名称 | 属性作用 | 是否重要 |
---|---|---|
name | cookie的名称 | 必要属性 |
value | cookie的值(不能是中文) | 必要属性 |
path | cookie的路径 | 重要 |
domain | cookie的域名 | 重要 |
maxAge | cookie的生存时间。 | 重要 |
version | cookie的版本号。 | 不重要 |
comment | cookie的说明。 | 不重要 |
4、方法
方法名 | 作用 |
---|---|
Cookie(String name,String value) | 构造方法 |
get与set | 获取值和赋值 |
- 添加Cookie HttpServletResponse
返回值 | 方法名 | 说明 |
---|---|---|
void | addCookie(Cookie cookie) | 向客户端添加Cookie |
- 获取Cookie HttpServletRequest
返回值 | 方法名 | 说明 |
---|---|---|
Cookie[] | getCookie() | 获取所有Cookie |
5、使用
记录最后访问时间,并在浏览器显示出来
@WebServlet("/cookieDemo")
public class CookieDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//输出提示信息
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.write("您上次登入于");
//创建Cookie对象,用于记录最后访问时间
Cookie cookie = new Cookie("time",System.currentTimeMillis()+"");
//设置最大存活时间
cookie.setMaxAge(60*60);
//将Cookie添加到客户端
resp.addCookie(cookie);
//获取Cookie
Cookie[] cookies = req.getCookies();
for (Cookie cookie1 : cookies) {
if ("time".equals(cookie1.getName())){
String value = cookie1.getValue();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
writer.write(dateFormat.format(new Date(Long.parseLong(value))));
}
}
}
}
6、细节
-
Cookie有大小,个数限制。
- 每个网站最多只能存20个cookie,且大小不能超过4kb。
- 所有网站的cookie总数不超过300个。
-
Cookie的名称只能包含ASCCI码表中的字母,数字字符。不能包含逗号,分号,空格,不能以$开头,也不支持中文
-
存活时间限制 setMaxAge()方法接受数字
- 负整数 当前会话有效,关闭浏览器就删除
- 0 立即删除
- 正整数 以秒为单位设置存活时间
-
访问路径限制
-
取自第一次访问的资源路径前缀
-
只要以这个前缀为开头(包括子级路径),就能获取到
-
否则获取不到
cookie的path user/loca/admin
请求的path user/local 不能获取到Cookie
请求的path user/local/admin/cool 能获取到Cookie
-
评论区