• Servlet(3):Cookie和Session


    一. Cookie

    Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了

    1. 使用cookie记录用户上一次访问的时间

    public class CookieTest extends javax.servlet.http.HttpServlet {
    boolean flag=false;
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    

    //乱码问题
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");

    //通过用户请求,检查它是否带有cookie
    Cookie[] cookies = request.getCookies();
    if(flag){
    if(cookies!=null){
    for (int i = 0; i < cookies.length; i++) {
    Cookie cookie=cookies[i];
    if(cookie.getName().equals("lastLoginTime")){
    response.getWriter().println("你上次来的时间为:"+cookie.getValue());
    }
    }
    }
    }else {
    response.getWriter().println("你是第一次来");
    }
    flag=true;

        <span class="hljs-comment">//服务端建立一个cookie,把这个cookie发给客户端</span>
        response.addCookie(<span class="hljs-keyword">new</span> <span class="hljs-type">Cookie</span>(<span class="hljs-string">"lastLoginTime"</span>,<span class="hljs-type">System</span>.currentTimeMillis()+<span class="hljs-string">""</span>));
    }
    
    <span class="hljs-keyword">protected</span> void doGet(javax.servlet.http.<span class="hljs-type">HttpServletRequest</span> request, javax.servlet.http.<span class="hljs-type">HttpServletResponse</span> response) <span class="hljs-keyword">throws</span> javax.servlet.<span class="hljs-type">ServletException</span>, <span class="hljs-type">IOException</span> {
        doPost(request,response);
    }
    

    }

    1,第一次访问时这个Servlet时,效果如下所示:
    在这里插入图片描述
    2,点击浏览器的刷新按钮,进行第二次访问,此时就服务器就可以通过cookie获取浏览器上一次访问的时间了,效果如下:
    在这里插入图片描述

    二. Session

    Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务

    1. session实现原理

    //session存入信息
            //乱码问题
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("utf-8");
    
        <span class="hljs-comment">//Session由服务器自动创建;HttpSession 得到的sessioin对象</span>
        HttpSession session = request.getSession();
    
        <span class="hljs-comment">//得到sessionID,一次会话,一个seesionID;</span>
        <span class="hljs-built_in">String</span> id = session.getId();
        response.getWriter().println(<span class="hljs-string">"获得的session的ID:"</span>+id);
    
        <span class="hljs-built_in">String</span> name=<span class="hljs-string">"学java的闪电侠"</span>;
        <span class="hljs-comment">//向session中存入一个值;</span>
        session.setAttribute(<span class="hljs-string">"name"</span>,name);
        response.getWriter().println(<span class="hljs-string">"存入信息成功:"</span>+name);
    

    //获得session存入的信息
           //乱码问题
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("utf-8");
    
            //获得
            HttpSession session = request.getSession();
    
            String name = (String) session.getAttribute("name");
            response.getWriter().println("得到的session存入的信息:"+name);
    

    1,第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器
    在这里插入图片描述
    2,再次请求服务器,此时就可以看到浏览器再请求服务器时,会把存储到cookie中的session的Id一起传递到服务器端了
    在这里插入图片描述

    【注意:session.invalidate(); // 通过代码注销会话】

    三. Session和Cookie的主要区别

    • Cookie是把用户的数据写给用户的浏览器
    • Session技术把用户的数据写到用户独占的session中
    • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
  • 相关阅读:
    性能监控(5)–JAVA下的jstat命令
    内存分析工具-MAT(Memory Analyzer Tool)
    性能监控(4)–linux下的pidstat命令
    性能监控(3)–linux下的iostat命令
    性能监控(2)–linux下的vmstat命令
    性能监控(1)--linux下的top命令
    了解java虚拟机—在TALB上分配对象(10)
    了解java虚拟机—G1回收器(9)
    js 长按鼠标左键实现溢出内容左右滚动滚动
    html标签设置contenteditable时,去除粘贴文本自带样式
  • 原文地址:https://www.cnblogs.com/edda/p/13340081.html
Copyright © 2020-2023  润新知