Servlet——Servlet中Cookie和Session

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。Servlet——Servlet中Cookie和Session,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Cookie

cookie是字符串,是客户端保存数据的一种方式。
1.从哪来?
服务器通过Set-Cookie字段返回的内容.
2.怎么存的?
浏览器按照域名/地址,分别存储,组织成键值对的结构.
3.到哪去?
下次请求的时候就通过请求中的Cookie字段自动把Cookie数据带到服务器端了.

往浏览器中写入cookie,再在Tomcat进行部署

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;


//服务器给浏览器写回Cookie
public class ServletDemo7 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、先构造Cookie对象,一个Cookie对象就是一个键值对
        Cookie userName = new Cookie("userName","hhh");
        Cookie age = new Cookie("age",18+"");
        //2、把Cookie放到响应中
        resp.addCookie(userName);
        resp.addCookie(age);
        //创建一个响应报文
        resp.setContentType("text/html; charset=utf-8");
        resp.getWriter().write("返回Cookie成功!");


    }
}

在这里插入图片描述
通过读取请求,获取到浏览器发来的Cookie内容

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.Writer;

//通过读取请求,获取到浏览器发来的Cookie内容
public class ServletDemo8 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        resp.setContentType("text/html; charset=utf-8");
        Writer writer = resp.getWriter();
        writer.write("<html>");
        for (Cookie c :cookies) {
            writer.write(c.getName()+":"+c.getValue());
            writer.write("<br/>");

        }
        writer.write("</html>");

    }
}

在这里插入图片描述
setMaxAge
设置Cookie的过期时间.超过这个时间, Cookie就失效了,浏览器就自动删除这个Cookie
如果把setMaxAge(0) ,意味着立刻删除Cookie
这种操作这是服务器删除Cookie的方式.这都是保存在浏览器的. (用户可以随意修改)很少使用这个机制.控制cookie是不可靠的。

Session

Session:服务器存储数据的一种方式,也是通过键值对的方式来组织的.
key就是sessionld, value就是一个具体的Session . (Session中又可以包含- -些用户自定制的内容)

写一个页面,通过这个页面来记录当前用户访问了几次.



import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.Writer;

public class ServletDemo9 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、先获取Session,如果用户曾经没有访问过,此时将创建新的session
        //如果用户已经访问过了,就获取到曾经的Session
        //新用户初次访问:
        //这个操作会自动生成一个sessionId,同时创建一个httpSession对象
        //把这个键值对放到内置的hash表中,同时把session写回到浏览器的Cookie中
        //老用户访问:
        //根据请求中Cookie里的sessionId,在hash表中查,找到对应的session对象
        HttpSession httpSession = req.getSession(true);
        //2、判断是否是新用户
        Integer count = 1;
        if(httpSession.isNew()){
            //新用户
            //把count值写入session对象中
            //httpSession也可以当成一个hash表、
            httpSession.setAttribute("count",count);
        }else {
            //老用户
            //从httpSession 中读取count值
            count = (Integer) httpSession.getAttribute("count");
            count = count+1;
            //count 自增完成后需要重新写入session
            httpSession.setAttribute("count",count);
        }

        //返回响应页面
        resp.setContentType("text/html; charset=utf-8");
        Writer writer = resp.getWriter();
        writer.write("<html>");
        writer.write("count: "+count);
        writer.write("</html>");

    }
}

不同的浏览器Session不一样,给每个用户分配一个唯一的 sessionld,不同的用户会有不同的sessionld.,而在服务器端,就会保存不同的键值对,也就会有不同的HttpSession对象
也就保存不同的count内容.

在这里插入图片描述

如何判定当前访问是新用户的呢?

如果cookie中没有sessionld,或者有sessionld但是服务器中查找不到,都是新用户.
如果发现是新用户,就创建新的sessionld,创建新的键值对.

删掉浏览器中的Cookie

新用户的请求,没有cookie或者cookie中的sessionld在服务器中查不到.
在这里插入图片描述

新用户服务器就会在调用getSession的时候创建新的sessionld, 并通过响应返回给浏览器,保存到Cookie中.
在这里插入图片描述
浏览器如果继续访问服务器,就会在Cookie中自动带上这个新的sessionld
进而,服务器就可以根据这个sessionld来找到之前保存的访问次数.
在这里插入图片描述
SessionId和上面的相同,在服务器上获取到对应的Session对象,再获取到对应的count值.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/152937.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!