• Java开发工程师(Web方向)


    第2章--Cookie与Session

    Cookie与Session

    浏览器输入地址--HTTP请求--Servlet--HTTP响应--浏览器接收

    会话(session):打开浏览器,打开一系列页面,关闭浏览器

    使用场景:

    网购网站的偏好记录

    网站的自动登录

    浏览记录,如欢迎标语“xxx再次回来”

    原理:客户端/服务器端保存会话数据:Cookie(浏览器端)/Session(服务器端)

    Cookie:

    为了辨别用于身份而储存在用户终端的key-value数据

    工作流程:

    浏览器发出HTTP请求

    服务器根据需要生成Cookie对象并把相关数据保存在该对象中

    将Cookie对象放在HTTP响应头中一并发送给浏览器

    浏览器接收到响应后,提出该Cookie并保存;

    浏览器第二次访问该服务器时

    将Cookie放在请求头中一并发送给服务器

    服务器从请求头中提取该Cookie对象读取数据做出个性化的响应

    Cookie的生命周期:

    默认为 会话结束后失效 -- 称为会话Cookie,一般保存在内存中

    setMaxAge设置有效期,保存在硬盘中

    Cookie的缺陷:

    大小和数量的限制:一般为每个站点保存最多20个Cookie,每个Cookie在4k以内

    数据安全性问题:HTTP请求中的Cookie是明文传递的

    Cookie:

    case:登陆

    登陆页面 form post获取userName和userPassword到user/specify

    在user/specify的Servlet中:process() 中

    String userName=request.getParameter("userName"); 

    String userPassword=request.getParameter("userPassword");

    // 创建Cookie
    Cookie userNameCookie = new Cookie("userName", userName);
    Cookie passwordCookie = new Cookie("password", userPassword);
    // 将Cookie放入对应的响应体中
    response.addCookie(userNameCookie);
    response.addCookie(passwordCookie);
    // 设置过期时间
    userNameCookie.setMaxAge(2 * 60); // unit minute
    passwordCookie.setMaxAge(2 * 60);

    第二次登陆时读取cookie:

    Cookie[] cookies = request.getCookies();
    if(cookies != null) {
        for(Cookie cookie: cookies) {
            if(cookie.getName().equals("userName")) {
                userName = cookie.getValue();
            }
            if(cookie.getName().equals("userPassword") {
                userPassword = cookie.getValue();
            }
        }
    }

    第二次登陆页面时,打开developer tools--Application--cookies可见详情

     

    Session:

    HTTPSession服务器端为客户端创建的对象,用于保存客户端的状态数据

    工作原理:

    浏览器端发送HTTP请求到服务器端

    服务器端根据请求需求生成一个Session对象,并给该对象附上唯一编号和对应数据

    服务器端将Session对象的唯一编号放到Cookie对象中

    服务器将HTTP响应返回给浏览器端

    浏览器再次发送请求到该服务器时

    服务器收到带有Seesion id的Cookie之后,取出Session id,找到对应Session对象

    辨别出对应用户后,对用户进行个性化的响应

    Session生命周期

    默认有效期30分钟

    setMaxInactiveInterval设置有效期(单位:秒)

    部署描述符配置有效期(单位:分钟)

    <session-config>
        <session-timeout>2</session-timeout>
    </session-config>

    invalidate使Session失效

    --优先级:接口 > 部署描述符

    case:登陆(在上例Cookie的基础上)

    // 创建HTTPSession对象
    HttpSession session = request.getSession();    // 无Session时默认创建新的Session对象
    String name = (String) session.getAttribute("userName");
    session.setMaxInactiveInterval(2 * 60);  // expire time (seconds)
    session.invalidate();  // invalidate the session

    // 再次请求时
    if (name != null) {
    syso("second login: " + name);
    }

    // 将数据放入Session对象
    session.setAttribute("userName", userName);

    在Chrome--developer tools--Application--Cookies--可以看到JSESSIONID

    总结:

    数据存储:Cookie存在于客户端;Session存在于服务器端

    安全性:Cookie在客户端明文传递;Session存在于服务器端的内存中,安全性较强

    生命周期:到时间失效;Cookie时间设置为第一次访问开始算起;Session时间设置为从最后一次访问开始算起,Session可主动让其失效

    使用原则:Cookie有数量(20)、大小(4k)限制;Session存在于内存,建议大小不要太大

     

    单元测验: Cookie与Session

    本次得分为:20.00/20.00, 本次测试的提交时间为:2017-08-07, 如果你认为本次测试成绩不理想,你可以选择再做一次。
    1单选(2分)

    下面哪种场景没有使用会话技术?

    • A.第二次登录某网站时,页面会显示“欢迎再次回来”的提示
    • B.打开某网站,随机弹出广告�2.00/2.00
    • C.登录购物网站后,首页会推荐一些之前你浏览过的商品
    • D.第一次登录某网站输入用户名密码后,第二次无需再次输入用户名密码
    2单选(2分)

    下面哪项关于Cookie与Session的生命周期说法是错误的?

    • A.Session可以主动让其失效,Cookie则不行
    • B.Session默认情况下,有效期是30分钟
    • C.Cookie默认情况下,会话结束后失效
    • D.Session通过部署描述符设置的有效期优先级高于通过API设置的有效期�2.00/2.00
    3单选(2分)

    下面哪项说法是错误的?

    • A.浏览器对每个站点能够存放的Cookie数量是没有限制的�2.00/2.00
    • B.Session的生命周期是间隔的,即从最后一次访问开始计时
    • C.Cookie的生命周期是累积的,到点即失效
    • D.浏览器对每个站点能够存放的Cookie的大小是有限制的
    4单选(2分)

    下面哪项对Session的说法是错误的?

    • A.Session因为保存在服务端,所以可以任意使用�2.00/2.00
    • B.每一个Session对象都有一个唯一的Session Id
    • C.程序开发人员可以通过API调用主动让Session失效
    • D.Web应用程序关闭,Session会失效
    5单选(2分)

    下面哪项说法是正确的?

    • A.Cookie有Cookie Id作为唯一标识,区分不同Cookie
    • B.Session跟Cookie是独立存在的,没有相互依赖的关系
    • C.每个站点只能访问存放在自己站点下的Cookie�2.00/2.00
    • D.Cookie是在客户端产生的
    6判断(2分)

    Cookie是保存在客户端,Session是保存在服务端

    • A.√�2.00/2.00
    • B.×
    7判断(2分)
    Cookie和Session都是保存的key,value的键值对数据
    • A.√�2.00/2.00
    • B.×
    8判断(2分)

    相对而言,Cookie比Session安全性更高

    • A.√
    • B.×�2.00/2.00
    9判断(2分)

    Cookie是一直会保存在客户端浏览器中

    • A.×�2.00/2.00
    • B.√
    10判断(2分)

    Session有默认的有效期,有效期过了Session数据会失效

    • A.√�2.00/2.00
    • B.×
  • 相关阅读:
    微软MSBI商业智能视频
    华为HG8245 电信 光猫破解获取超级密码
    Html5与CSS3权威指南 百度云下载
    GUI常用对象介绍3
    GUI常用对象介绍2
    GUI常用对象的属性
    AtCoder Beginner Contest 082 B
    AtCoder Beginner Contest 082 A
    回文字符串
    进制转换(大数)
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/7298773.html
Copyright © 2020-2023  润新知