Java Web05:Cookie和Session

客户端技术,第一次访问时服务器端通过响应发送,第二次访问时客户端通过请求携带

信息存放在客户端

import javax.servlet.ServletException;
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;
import java.util.Date;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {

        res.setContentType("text/html;charset=utf-8");

        PrintWriter out = res.getWriter();

        /**
         * getCookies()方法通过请求获取Cookie数组,包含多个Cookie
         */
        Cookie[] cookies = req.getCookies();

        boolean isFirst = true;

        /**
         * 第一次访问时没有Cookie,需要服务器响应返回Cookie
         */
        for (Cookie cookie : cookies) {

            /**
             * 如果存在名为lastLoginTime的Cookie,将其转换为标准时间
             * getName()方法获得Cookie值
             */
            if (cookie.getName().equals("lastLoginTime")){

                isFirst = false;
                out.write("上一次访问时间是:");

                long l = Long.parseLong(cookie.getValue());
                Date date = new Date(l);
                out.write(date.toLocaleString());
            }
        }

        if (isFirst) {
            out.write("这是第一次访问,需要响应返回一个Cookie");
        }

        /**
         * 服务器端发送Cookie
         * new Cookie()方法新建Cookie
         * addCookie()方法添加Cookie
         */
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        res.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

Cookie的限制:

  • 一个Cookie只能保存一个信息,只能存储字符串
  • 一个Web站点最多存放20个Cookie
  • Cookie大小限制为4Kb
  • 浏览器最多存放300个Cookie

删除Cookie的方法:

  • 不设置有效期,关闭浏览器自动失效
  • 新建一个同名的Cookie,将其有效期设置为0,然后响应回去,可以让该Cookie立即过期

Session

服务器端技术,可以保存用户的会话信息,将信息和数据放在Session中

服务器会给每一个用户(浏览器)创建一个Session对象,不仅可以存储字符串,还可以存储对象

服务器响应给用户一个Session的ID(就是一个Cookie),用户凭借这个ID在服务器存取信息,信息存放在服务器端

image

setAttribute()

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {

        res.setContentType("text/html;charset=utf-8");

        PrintWriter out = res.getWriter();

        /**
         * getSession()方法通过请求获取Session()
         */
        HttpSession session = req.getSession();

        /**
         * setAttribute()方法往Session存东西
         * 其本质也是新建了一个个Cookie
         */
        session.setAttribute("name", "Java");

        /**
         * getId()方法获取Session的ID
         */
        String id = session.getId();

        /**
         * 判断Session是否已经存在
         */
        if (session.isNew()) {
            out.write("Session创建成功,ID为:" + id);
        }
        else {
            out.write("Session已经存在,ID为:" + id);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

getAttribute()

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class test extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {

        res.setContentType("text/html;charset=utf-8");

        PrintWriter out = res.getWriter();

        /**
         * getSession()方法通过请求获取Session()
         */
        HttpSession session = req.getSession();

        /**
         * getAttribute()方法获取已经存在的Session
         */
        String name = (String) session.getAttribute("name");

        out.println(name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

注销Session的方法:

  • invalidate()方法,手动注销
  • 配置web.xml文件,自动注销
<!--配置Session-->
<session-config>
    <!--设置15分钟后过期-->
    <session-timeout>15</session-timeout>
</session-config>
posted @ 2022-04-19 09:58  振袖秋枫问红叶  阅读(38)  评论(0)    收藏  举报