day10_cookie&session学习笔记

简介: 一、会话概述  1、什么是会话?如同打电话。      会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。  2、会话过程要解决的问题是什么?保持各个客户端自己的数据。

一、会话概述

  1、什么是会话?如同打电话。

      会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

  2、会话过程要解决的问题是什么?保持各个客户端自己的数据。

      每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。

      例如:用户点击超链接通过一个servlet购买了一个商品,程序应该想办法保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户购买的商品为用户结帐。

      思考:用户购买的商品保存在request或servletContext中行不行?答:不行。

  保存会话数据的两种技术 :

    Cookie:是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。

       当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。

       这样,web资源处理的就是用户各自的数据了。

    HttpSession:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象

       由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,

       当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

二、Cookie(饼干/小甜饼)

    由于Cookie数据是由客户端来保存和携带的,所以称之为客户端技术。

  

    javax.servlet.http.Cookie类用于创建一个Cookie,response接口中定义了一个addCookie方法,它用于在其响应消息头中增加一个相应的Set-Cookie头字段。 

    同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

  1、属性:

    name:该名称不能唯一确定一个Cookie。路径可能不同。

    value:不能存中文。

    path:默认值是写Cookie的那个程序的访问路径。

    比如:http://localhost:8080/day10_00_cookie/servlet/ck1写的Cookie

    path就是:/day10_00_cookie/servlet 即看当前创建cookie的资源(servlet)文件路径。

      客户端在访问服务器另外资源时,根据访问的路径来决定是否带着Cookie到服务器。

      如果当前访问的路径是以cookie的path开头的路径(包括在该路径下的子路径),浏览器就带Cookie。否则不带Cookie。

    maxAge:cookie的缓存时间。默认是-1,-1指示该cookie将保留到浏览器关闭为止。(默认存在浏览器的缓存中)。单位是秒。

      负数:表示cookie的数据存在浏览器缓存中。

      0:表示删除。注意:路径要保持一致,否则可能删错人。

      正数:表示缓存(持久化到磁盘上)的时间。单位是秒。

  2、方法:

    public Cookie(String name, String value) 构造方法(只有一个)

    setValue与getValue方法 

    setMaxAge与getMaxAge方法(单位为秒)

    setPath与getPath方法

    setDomain与getDomain方法

    getName方法

  3、补充知识点:

        面试题:Servlet负责那些事情?

            1. 获取表单数据

            2. 处理业务逻辑

            3. 分发转向

      案例:

          1. 客户端记住用户名

      

          2. 显示用户上次浏览过的商品

      

三、HttpSession(会话)

    在WEB开发中,服务器可以为每个用户浏览器创建一个 会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。
    因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
 
    Session和Cookie的主要区别在于:
    Cookie是把用户的数据写给用户的浏览器。
 
    Session技术把用户的数据写到用户独占的session中。
    Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

  1、为什么要学HttpSession?

      > 它也是一个域对象: servletContext(不同浏览器) > session(同一浏览器的多个会话) > request(一个会话) 

      > 同一个会话下,可以使一个应用的多个资源共享数据

      > cookie是客户端技术,只能存字符串,不安全,存储少量信息,不适合存储敏感信息。HttpSession是服务器端的技术,它可以存对象

  2、常用方法

      把数据保存在HttpSession对象中,该对象也是一个域对象

        void setAttribute(String name, Object value) 使用指定名称将对象绑定到此会话。如果具有同样名称的对象已经绑定到该会话,则替换该对象。

        Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回 null。

        void removeAttribute(String name) 从此会话中移除与指定名称绑定在一起的对象。如果会话没有与指定名称绑定在一起的对象,则此方法不执行任何操作。

        String getId() 返回包含分配给此会话的唯一标识符的字符串。标识符是由 servlet 容器分配的,并且是与实现相关的。 

        setMaxInactiveInterval(int interval) 设置session的存活时间(默认存活时间是30分钟)

        void invalidate() 使此会话无效(退出网站时调用)

  3、getSession():内部执行原理

      HttpSession request.getSession():内部执行原理

        1、获取名称为JSESSIONID的Cookie的值。例如:Cookie: JSESSIONID=070BB766FAB03E03DBF28F8040CA616F

        2、如果没有这样的Cookie,服务器则创建一个新的HttpSession对象,并分配一个唯一的SessionID,并且向客户端写了一个名字为JSESSIONID=sessionID的Cookie。

        3、如果有这样的Cookie,服务器则获取Cookie的值(即HttpSession对象的值),从服务器的内存中根据ID找那个HttpSession对象:

          找到了:取出继续为你服务。

          找不到:从2开始,创建一个新的HttpSession对象

      HttpSession request.getSession(boolean create):返回与此请求关联的当前 HttpSession,如果没有当前会话并且 create 为 true,则返回一个新会话。 

        参数:

          true:和getSession()功能一样。

          false:根据客户端JSESSIONID的Cookie的值,找对应的HttpSession对象,找不到返回null(但不会创建新的,只是查询)。

        

  4、客户端禁用Cookie后的会话数据保存问题

      客户端禁用Cookie:浏览器永远不会向服务器发送Cookie的请求消息头。

      解决方案:

        方案一:在主页上给出提示:请不要禁用您的Cookie。

        方案二:URL重写。必须对网站的所有地址都重写。  

               http://url  ---> http://url;JSESSIONID=070BB766FAB03E03DBF28F8040CA616F    

        response.encodeRedirectURL(String url);

              用于对sendRedirect方法后的url地址进行重写。

        response.encodeURL(String url);

            看浏览器有没有发送Cookie请求消息头,没有就重写URL,有就不重写。

            用于对表单action和超链接的url地址进行重写。

        request.getSession(); // 必须写,虽然没有接收

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
12月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
416 57
|
10月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
230 11
|
12月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
1071 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
11月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
217 4
|
11月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
494 1
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
900 1
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
225 1