zoukankan      html  css  js  c++  java
  • 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.×
  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/7298773.html
Copyright © 2011-2022 走看看