欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb学习笔记(六)Cookie 和 Session

程序员文章站 2024-02-28 08:46:10
...

 

上一篇:JavaWeb学习笔记(五)HttpServletRequest和HttpServletResponse

 

JavaWeb学习笔记(六)Cookie 和 Session

JavaWeb学习笔记(六)Cookie 和 Session

一、cookie

当浏览器被访问,保存一个名为lastLoginTime的cookie,设置其值是访问时间

当下一次访问浏览器时,获取cookie数组,找到名为lastLoginTime的cookie,获取其值

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        resp.setContentType("text/html");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();

        if(cookies!=null){//如果访问过
            //取到名为lastLoginTime的cookie的值,输出
            for(int i=0;i< cookies.length;i++){
                Cookie cookie = cookies[i];
                if(cookie.getName().equals("lastLoginTime")){
                    //Long.parseLong 将 string 参数解析为有符号十进制
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write("上一次登录时间:");
                    out.write(date.toString());
                }
            }
        }else{
            out.write("第一次登录");
        }
        //设置一个名为lastLoginTime的cookie
        Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
        resp.addCookie(cookie);
    }

在另外的类中删除cookie:

JavaWeb学习笔记(六)Cookie 和 Session

 

二、Session

存session

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //解决中文乱码
    resp.setContentType("text/html");
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");

    HttpSession session = req.getSession();
    session.setAttribute("name","小罗");

    String sessionId = session.getId();
    if(session.isNew()){resp.getWriter().write("session创建成功ID="+sessionId);}
    else{resp.getWriter().write("session已存在ID="+sessionId);}
}

获取session

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    String name = (String)session.getAttribute("name");
    System.out.println(name);
}

删除session

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    session.removeAttribute("name");
    session.invalidate();
}

也可以在web.xml中设置时间,默认失效

JavaWeb学习笔记(六)Cookie 和 Session

 

三、区别

1. cookie数据存放在客户的浏览器上,session数据放在服务器上:

对于cookie:WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者

对于session:用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,所以一旦客户端禁用Cookie,那么Session也会失效。

2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型