java-web7-Cookie基础知识

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 java-web7-Cookie基础知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

7. Cookie

7.1 Session会话

  • 通俗意义上讲,两者的关系。“给你个饼干 我们就产生会话”
  • **会话:**用户打开一个浏览器点击了很多链接,访问很多web资源,关闭浏览器,这个过程是会话
  • cookie是存在客户端的,session是存在服务端的
  • 有状态会话:二次访问同一网站时,网站知道之前访问过,即为有状态会话

7.2 服务器如何知道客户端访问过?

  • 服务端给客户端一个信件,客户端下次访问服务端时带着即可,这就是Cookie
  • 服务端登记客户端来过,下次访问时进行匹配即可。Session

7.3 保存会话的两种技术

  • Cookie:客户端技术(客户端请求携带,服务器响应发送)

  • Session:服务器技术,保存会话信息。存放数据。

7.4 Cookie

  • 从请求中拿到Cookie信息
  • 服务器响应给客户端一个或多个Cookie
  • 客户端请求服务器时携带Cookie信息

setMaxAge(int expiry) @param expiry 一个整数,指定 cookie 的最大年龄(以秒为单位);如果为负,则表示不存储 cookie;如果为零,则删除 cookie

/*保存上次访问的时间,没有io解决不了的事务*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html;charset=utf-8");
    req.setCharacterEncoding("utf-8");
    //服务器给客户端发送cookie
    PrintWriter out = resp.getWriter();

    //Cookie从请求中获取,但第一次请求时没有Cookie的
    Cookie[] cookies = req.getCookies();
    if (cookies!=null) {
        out.write("上次访问的时间是:");
        for (int i = 0; i < cookies.length; i++) {
            Cookie cookie = cookies[i];
            if (cookie.getName().equals("lastTime")) {
                long longtime = Long.parseLong(cookie.getValue());
                Date date = new Date(longtime);
                out.write(date.toLocaleString());
            }
        }
    }else {
        out.write("第一次请求。");
    }
    //局限性,只能存字符串,存储内容少
    Cookie cookie = new Cookie("lastTime",String.valueOf(System.currentTimeMillis()));
    //设置Cookie时效,会让此机制不安全(浏览器关闭,cookie还存在)
    cookie.setMaxAge(24*60*60);
    resp.addCookie(cookie);
}
  • Cookie一般会保存在本地用户目录下的appdata文件夹

7.5 一个网站的Cookie上限

  • 一个Cookie只能存一个信息
  • 一个web站点可以给浏览器发送多个Cookie,最多存放20个Cookie
  • Cookie大小为4kb
  • 浏览器最多存300个Cookie

7.6 删除Cookie:

  • 不设置时效,关闭浏览器自动失效;

  • 设置时效为0

方式2:用同名Cookie进行干预
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //删除cookie方式2,设置同名cookie才会替换原来的
    Cookie cookie = new Cookie("lastTime",String.valueOf(System.currentTimeMillis()));
    //时效为0秒
    cookie.setMaxAge(0);
    resp.addCookie(cookie);
}

7.7 Cookie传输中中文编码问题

URLEncoder.encode("托尼","utf-8");  //编码

URLDecoder.decode(cookie.getValue(),"utf-8"); //解码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123940.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!