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对象
posted @ 2020-07-19 16:10  edda_huang  阅读(129)  评论(0编辑  收藏  举报