zoukankan      html  css  js  c++  java
  • Cookie&Seesion会话 共享数据 工作流程 持久化 Servlet三个作用域 会话机制

    Day37 Cookie&Seesion会话

    1.1.1 什么是cookie

    当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。

    1.1.2  

    1.1.3  

    1.1.4  

    1.1.5 会话技术

    概念:

    用户打开浏览器,点击多个超链接访问服务器的web资源,然后关闭浏览器,整个过程称之为一次会话.(打电话)

    作用:

    每个用户与服务器进行交互过程中,产生各自的数据,程序想要将这个数据进行保存,就需要使用会话技术.

    一次会话中多次请求之间共享数据

    当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应

    服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie遵循一定的语法格式,具体示例如下:

    Set-Cookie: user=itcast; Path=/;

    1.1.6 Cookie执行原理(工作流程):

    浏览器访问服务器,服务器产生键值对的形式(cookie),通过响应(响应头 set-cookie)返回给浏览器,cookie保存在浏览器上,下次访问的服务器时候,根据一定的规则携带不同的cookie,通过请求(请求头 cookie)携带,服务器就可以拿到这些cookie

     

    描述了Cookie在浏览器和服务器之间的传输过程。当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将用户信息以Cookie的形式发送给浏览器。一旦用户浏览器接受了服务器发送的Cookie信息,就会将它保存在浏览器的缓冲区中,这样,当浏览器后续访问该服务器时,都会在请求消息中将用户信息以Cookie的形式发送给Web服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。

     

    l Cookie和缓存的区别(了解).

    n 缓存是浏览器自动进行处理的

    Cookie是服务器要求浏览器保存的数据

    1.1.7 CookieAPI

    方法名

    描述

    getName()

    获得cookie名称。

    getValue()

    获得cookie的值。

    setMaxAge(int expiry)

    设置cookie的有效时间。

    l 如果没有设置,cookie只缓存浏览器缓存中,浏览器关闭,cookie删除。

    l 如果设置有效时间,在时间范围内,cookie被写入到浏览器端,关闭浏览器下次访问仍可获得,直到过期。

    setPath(java.lang.String uri)

    设置cookie允许被访问的路径。设置的路径,以及子路径都被允许访问。

    l 例如:setPath("/web/a/b");

    http://localhost:8080/web/a/b/oneServlet,可访问(当前路径)

    http://localhost:8080/web/a/b/c/oneServlet,可访问(子路径)

    http://localhost:8080/web/a/c/oneServlet,不允许访问(无关路径)

    l 常见设置:setPath(“/”) ,当前tomcat下的所有的web项目都可以访问

     

    1.1.7.1 Session概念

    Session是服务器端会话技术

    提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信息(一个会话多次请求之间共享数据)

    一次会话中,如果需要数据保存到服务器端.创建一个Session对象用来保存数据.(一次会话对应一个Session对象)

    务器将Session对象的ID属性以Cookie (Set-Cookie: JSESSIONID=111)的形式返回给甲的浏览器。当甲完成购物进行结账时,需要向服务器发送结账请求,这时,浏览器自动在请求消息头中将Cookie (Cookie: JSESSIONID=111)信息回送给服务器,服务器根据ID属性找到为用户甲所创建的Session对象,并将Session对象中所存放的Nokia手机信息取出进行结算。 

    1.1.7.2 Session执行原理

     

    生命周期(了解)

    Session对象创建到销毁的过程

    创建

    创建时间:第一次调用request.getSession();

    创建者:tomcat服务器

    销毁

    超时

    默认Session的有效时间为30分钟.当浏览器关闭时,会话级别的cookie就自动销毁了,无法获得sessionid,就不能获得服务器端的Session对象,但服务器端的Session依然存在.

    Tomcat/conf/web.xml

        <session-config>

            <session-timeout>30</session-timeout>

        </session-config>

    服务器非正常关闭

    手动调用方法

    session.invalidate();   实际开发中不用

    l SessionAPI

    保存数据

    u setAttribute(String name,Object obj)

    获得数据

    u getAttribute(String name);

    删除数据

    u removeAttribute(String name)

    1.1 小结:CookieSession的选取

    * Cookie是有大小和个数的限制的.Session存到服务器端的技术,没有大小和个数的限制.

    Cookie常用于:登录记住我”,浏览记录

    * Cookie相对于Session来讲不安全.

    Session常用于: 用户登录

    数据安全的信息保存Session,不安全的保存到Cookie

    1.2 Servlet三个作用域

    l ServletContext针对一个WEB项目

    创建:服务器启动时,为每一个项目创建一个

    销毁:服务器关闭或者项目被移除时

    作用域:整个web项目共享,数据永久共享.

     

    l HttpSession针对一个会话,一个会话多次请求之间共享数据

    创建:第一次使用getSession()

    销毁

    超时

    手动关闭

    服务器非正常关闭

    作用域: 一次会话中共享数据(多次请求多次响应中,多个servlet之间共享数据)

     

    l HttpServletRequest针对一次请求

    创建:客户端向服务器端发送请求.使用该对象保存数据,一次请求中数据有效

    销毁:服务器开始响应时

    作用域:一次请求中多个servlet之间共享数据,用于请求转发

     

    l 3个作用范围?

    servletConetext   >    Session  >  Request

    实际开发中原则: 能小不大

    通用API

    保存数据

    u setAttribute(String name,Object obj)

    获得数据

    u getAttribute(String name);

    删除数据

    u removeAttribute(String name)

    Session会话机制:

    Session基于Cookie的工作流程:

    1)当用户通过浏览器进程第一次请求一个支持会话的资源时,Servlet容器会为这个会话创建一个HttpSession对象,并为其分配一个唯一的ID(JsessionId),当前会话就此开始。

    2)把这个唯一的ID以name为JSESSIONID的Cookie形式添加到响应中,返回给客户端保存。(当Cookie被禁用时,使用URL重写机制,在URL后添加;jsessionid=XXX以传输HttpSession对象标识

    3)当浏览器进程再次请求这个支持会话的资源时,会在请求头中加上一直保持着的JSESSIONIDServlet容器会在HTTP请求头中自动查找这个Cookie(也可以通过HttpSession.getId()方法主动获取),如果找到就取出存在服务器端的对应HttpSession对象(其实用户第一次访问,也会进行相同的查询,因为查询不到,才会执行创建操作)。

  • 相关阅读:
    html/css 滚动到元素位置,显示加载动画
    React 监听页面滚动,界面动态显示
    Html/css 列表项 区分列表首尾
    Html/css 水平布局居中
    Html 设置标题栏顶部固定
    TypeScript 引用资源文件后提示找不到的异常处理
    Github自动打包并推送Nuget版本
    获取电脑的网络连接状态(六)适配器状态 及 几种方案耗时对比
    获取电脑的网络连接状态(五)WebClient
    获取电脑的网络连接状态(四)IPHost
  • 原文地址:https://www.cnblogs.com/shan1393/p/8945327.html
Copyright © 2011-2022 走看看