栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

会话跟踪技术 Session Cookie

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

会话跟踪技术 Session Cookie

1 什么是会话?

用户打开浏览器,访问 web 服务器的资源,这个时候会话建立起来,直到有一方断开了连接,会话结束。在一次的会话中可以包含多次的请求以及相应;

会话跟踪就是在一次会话的多次请求中共享数据;

一个浏览器访问一个服务器两者之间建立起来的就是一个会话,浏览器关闭页面,会话结束;

为什么需要共享数据?
比如一个登录功能,浏览器在保持打开的状态下,不小心点击了刷新,访问的是同一个服务器,乜有共享数据的话,上一次的登录信息都消失了,显然用户体验是不好的,所以这个时候需要进行会话跟踪,提高用户的体验;

共享数据,可以方便一些用户的操作,告诉服务器虽然是多次的操作,但是是一个用户发送的请求,同一个用户请求的数据是可以共享的;
比如登录一页网页,短时间内,不需要反复的登录,让服务器记住刚才是某个用户登录的就行;

2 解决 http 协议中的无状态实现方式

客户端会话跟踪技术:cookie
服务端会话跟踪技术:Ssession

3 cookie 3.1 cookie 基本使用原理 3.1.1 服务端向浏览器发送 cookie

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 创建 cookie 对象
        cookie cookie = new cookie("usernaem","zs");

        // 2 发送 cookie response
        response.addcookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
3.1.2 服务器获取浏览器发送来的 cookie
@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 获取 cookie 数组
        cookie[] cookies = request.getcookies();

        // 2 遍历数组
        for (cookie cookie : cookies) {
            // 3 获取数据
            String name = cookie.getName();

            if ("username".equals(name)) {
                String value = cookie.getValue();
                System.out.println(name + ":" + value);
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
3.3 cookie 原理

cookie 是怎么实现一次会话,两次访问的数据共享的


实现原理就是,服务器在响应头中将数据发送到浏览器,然后浏览器再访问该服务器的时候,在请求头中将 cookie 携带过去

3.4 cookie 使用细节


中文的问题可以通过编码以及解码的形式进行解决

4 Session

将数据保存在服务端;
Java EE 提供 HttpSession 接口,实现了一次会话多次请求间数据共享的功能;

4.1 Session 基本使用 4.1.1 SessionDemo1
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取Session 对象
        HttpSession session = request.getSession();

        // 存储到 Session 中
        session.setAttribute("username","zs");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4.1.2 SessionDemo2
@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取 Session 对象
        HttpSession session = request.getSession();

        // 获取数据
        Object username = session.getAttribute("username");

        System.out.println(username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4.2 Session 原理

Session 是基于 cookie 的

4.3 Session 使用细节

浏览器关闭了之后,获取到的 Session 就不是一个了,因为相当于开启了两次会话,是两个不一样的会话;不关闭服务器,多次访问同一个服务器,那么 Session 就是同一个,因为始终是一个会话;Session 的数据,不能关闭服务器,但是 cookie 的数据可以在计算机中存储很长时间;

5 小结

cookie 为了长期存储,未登录就可以识别的情况下使用;
Session 存储的是安全数据;

6 登录注册案例需求 6.1 需求说明

1、完成用户登录功能,如果用户勾选"记住用户" 下次的访问到登录界面自动的填充用户名以及密码;


2、完成注册功能,实现验证码功能

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762524.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号