zoukankan      html  css  js  c++  java
  • cookie implements session

    cookie实现会话

      服务器调用response.addCookie()设置set-cookie响应头后,浏览器收到这个响应头与数值后,会将它以文件的形式存储于本地PC上。当浏览器再次访问同一Web服务器时,会将之前收到的cookie作为cookie请求头自动发送给服务器。
      Cookie是HTTP header的一部分,其传输由HTTP协议控制。
      浏览器通常支持每个网站写出20个cookies。

    API使用

      使用setMaxAge()可以设定Cookie的有效期限,单位是“秒”,这样就会覆盖缺省设置——关闭浏览器后Cookie就失效。
      服务端若要读取浏览器提交的cookie,可以通过HttpServletRequest接口的getCookies方法,该方法返回一个Cookie数组,若没有cookies则返回null。你需要遍历整个数组来查询某个特定名称的cookie。目前,还没有类似于getCookieByName这样的方法来帮助简化工作。
      服务端也没有直接删除cookie的方法,只能创建一个同名的cookie,并将maxAge属性设置为0,并添加到HttpServletResponse接口中。

    新特征

      在Servlet 3.0中,Cookie类新增了setHttpOnly()方法,可以将Cookie标示为仅用于HTTP,这会在set-cookie标头上附加HttpOnly属性,在浏览器支持的情况下,这个Cookie将不会被客户端脚本(例如JavaScript)读取,可以使用isHttpOnly()来得知一个Cookie是否被setHttpOnly()标示为仅用于HTTP。

    缺点

      Cookies的问题在于用户可以通过改变其浏览器设置来拒绝接受cookies。       

    example

    package com.test;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/write.do")
    public class WriteCookie extends HttpServlet {
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Cookie cookie = new Cookie("Hello", "World");
            cookie.setMaxAge(7 * 24 * 60 * 60);
            resp.addCookie(cookie);
            resp.getWriter().write("cookie writed");
        }
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    }
    package com.test;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/read.do")
    public class ReadCookie extends HttpServlet {
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Cookie[] cookies = req.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    PrintWriter writer = resp.getWriter();
                    writer.println("cookie name:    " + name);
                    writer.println("cookie value:   " + value);
                }
            }
        }
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    }
  • 相关阅读:
    【转】java对File.listFiles()排序
    java 获取当前目录文件名
    python批量创建文件夹
    [好课推荐]数据结构与算法python实现
    SCI论文重复率与降重
    [转]一图搞定Matplotlib
    [GitHub寻宝]机器学习实战python3代码分享
    [好课推荐]人工智能实践:Tensorflow2.0
    [转]用深度学习给黑白照片上色
    java split函数分割字符串
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10054072.html
Copyright © 2011-2022 走看看