1、会话技术

  • 会话指的是客户端浏览器和服务端之间的度偶次请求和响应
  • 当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。就像打电话只要不挂电话就是一次会话。
  • 会话过程中产生的数据可以通过会话技术CookieSession保存

最常见的场景就是购物车

2、Cookie

客户端会话技术

  • 把要共享的数据保存到客户端,每次请求,把会话信息带到服务器,从而实现多次请求的数据共享

  • 可以保存客户端访问网站的相关内容,从而保证每次访问都先从本地缓存中获取,提高效率

3、常见属性

属性名称属性作用是否重要
namecookie的名称必要属性
valuecookie的值(不能是中文)必要属性
pathcookie的路径重要
domaincookie的域名重要
maxAgecookie的生存时间。重要
versioncookie的版本号。不重要
commentcookie的说明。不重要

4、方法

方法名作用
Cookie(String name,String value)构造方法
get与set获取值和赋值
  • 添加Cookie HttpServletResponse
返回值方法名说明
voidaddCookie(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