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);
}




}


    <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);


    <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 @   edda_huang  阅读(132)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)
点击右上角即可分享
微信分享提示

目录导航