会话跟踪技术

会话跟踪技术

会话:用户打开浏览器,访问wb服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
使用原因:HTTP是无状态的,每一次的请求都为被视为新的请求。
实现方式:
1.客户端:Cookie
2.服务端:Session

Cookie

cookie也是基于HTTP协议的
我们可以看到浏览器中存在set-cookie的响应头以及cookie的请求头

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建cookie对象
        Cookie cookie=new Cookie("username","zhangsan");
        //发送cookie
        resp.addCookie(cookie);
    }

我们可以在浏览器中找到我们发送的cookie
在这里插入图片描述
之后我们也可以自己去获取cookie对象

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取所有的cookie对象
        Cookie[] cookies=req.getCookies();

        //遍历cookie对象
        for (Cookie cookie : cookies) {
            //获取指定cookie
            String name=cookie.getName();
            if("username".equals(name)){
                String value=cookie.getValue();
                System.out.println(name+":"+value);
                break;
            }
        }
    }

在这里插入图片描述

cookie的生命周期

cookie的默认存活时间是当浏览器关闭,cookie回自动的销毁

不过我们可以通过设置setMaxAge,来改变cookie的存活时间

//设置cookie的生存时间,为7天
        cookie.setMaxAge(60*60*24*7);

默认的setMaxAge值为负数,表示浏览器关闭,cookie自动的销毁;值为零表示删除cookie

cookie是不能储存中文的,对于中文的数据我们需要用URL编码,将中文变成URL编码

value= URLEncoder.encode(value,"UTF-8");
value= URLDecoder.decode(value,"UTF-8");

Session

创建session对象,并上传

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建session对象
        HttpSession session = req.getSession();

        session.setAttribute("uname","zhangshan");
    }

创建session对象,并获取

HttpSession session = req.getSession();

        Object uname = session.getAttribute("uname");
        System.out.println(uname);

session的钝化,活化

钝化:在服务器正常关闭后,Tomcat会自动将Session的数据写入硬盘文件
活化:再次启动服务器后,从文件中加载数据到Session中

你可能感兴趣的:(后端学习,java,servlet,服务器)