Web会话技术Cookie和Session

news/2024/5/18 12:40:34 标签: 会话技术, session, cookie, web

Web会话技术Cookie和Session

   会话技术

    浏览器开始访问网站到访问网站结束期间产生的多次请求响应组合在一起叫做一次会话

    会话的过程中会产生会话相关的数据,我们需要将这些数据保存起来。
    Cookie:客户端技术
    Session:服务器端技术
    

    Cookie  

     cookie是什么

     Cookie是基于set-Cookie响应头和Cookie请求头工作的,服务器可以发送set-Cookie请求头命令浏览器保存一个cookie信息,浏览器会在访问服务器时以Cookie请求头的方式带回之前保存的信息

       
        request.getCookies();
        
        response.addCookie(Cookie c);
        
        new  Cookie(String name,String value)//Cookie在构造的时候就需要设定好cookie的名字和值
        getName();
        getValue();

        setValue();


        setMaxAge与getMaxAge方法  

            -- 一个Cookie如果没有设置过MaxAge则这个Cookie是一个会话级别的Cookie,这个Cookie信息打给浏览器后浏览器会将它保存在浏览器的内存中,这意味着只要浏览器已关闭随着浏览器内存的销毁Cookie信息也就消失了.一个Cookie也可以设置MaxAge,浏览一一旦发现收到的Cookie被设置了MaxAge,则会将这个Cookie信息以文件的形式保存在浏览器的临时文件夹中,保存到指定的时间到来位置.这样一来即使多次开关浏览器,由于这些浏览器都能在临时文件夹中看到cookie文件,所以在cookie失效之前cookie信息都存在.

      删除一个Cookie

            -- 想要命令浏览器删除一个Cookie,发送一个同名同path的cookie,maxage设置为0,浏览器以名字+path识别cookie,发现同名同path,cookie覆盖后立即超时被删除,从而就删除了cookie.
            

        setPath与getPath方法

            -- 用来通知浏览器在访问服务器中的哪个路径及其子路径时带着当前cookie信息过来
                如果不明确设置,则默认的路径是发送Cookie的Servlet所在的路径
                http://localhost/Day05/servlet/...

        setDomain与getDomain方法

            -- 用来通知浏览器在访问哪个域名的时候带着当前的cookie信息.但是要注意,现代的浏览器一旦发现cookie设置过domain信息则会拒绝接受这个Cookie.我们平常不要设置这个方法
        

        
    

    Session

        Session 是一个域

            作用范围:

        当前会话范围

            生命周期:

                当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建出对应客户端的Session对象.
                当session超过30分钟(这个时间是可以在web.xml文件中进行修改的)没有人使用则认为session超时销毁这个session.
                程序中明确的调用session.invalidate()方法可以立即杀死session.
                当服务器被非正常关闭时,随着虚拟机的死亡而死亡.
                *如果服务器是正常关闭,还未超时的session会被以文件的形式保存在服务器的work目录下,这个过程叫做session的钝化.下次再正常启动服务器时,钝化着的session会被恢复到内存中,这个过程叫做session的活化.

            作用:

     在会话范围内共享数据

        

    session 的原理:

        request.getSession()方法会检查请求中有没有JSESSIONID cookie,如果有拿出他的值找到对应的session为他服务.
        如果没有则检查请求的URL后有没有以参数的形式带着JSESSIONID过来,如果有则找到对应的Session为浏览器服务器
        如果还找不到则认为这个浏览器没有对应的Session,创建一个Session然后再在响应中添加JSESSIONID cookie,值就是这个Session 的id

        默认情况下,JSESSIONID 的path为当前web应用的名称,并且没有设置过MaxAge,是一个会话级别的cookie.
        
        这意味着一旦关闭浏览器再新开浏览器时,由于JSESSIONID丢失,会找不到之前的Session
        我们可以手动的发送JSESSIONID cookie,名字和path设置的和自动发送时一样,但是设置一下MaxAge,使浏览器除了在内存中保存JSESSIONID信息以外还在临时文件夹中以文件的形式保存,这样即使重开浏览器仍然可以使用之前的session

    URL重写:

        如果浏览器禁用了Cookie,浏览器就没有办法JSESSIONID cookie,这样就用不了Session了.
        我们可以使用URL重写的机制,在所有的超链接后都以参数的形式拼接JSESSIONID信息,从而在点击超链接时可以使用URL参数的方式待会JSESSIONID,从而使用Session
        将URL进行重写拼接上JSESSIONID的过程就叫做URL重写

        request.getSession() --在URL重写之前一定要先创建出Session,才有Session id,才能进行重写
        response.encodeURL()--- 一般的地址都用这个方法重写
        response.encodeRedirectURL() --- 如果地址是用来进行重定向的则使用这个方法
        
        *url重写的方法一旦发现浏览器带回了任意cookie信息,则认为客户端没有禁用cookie,就不会再进行重写操作


sessioncookie的对比

    cookie是客户端技术
        数据保存在客户端,这个信息可以保存很长时间
        数据随时有可能被清空,所以cookie保存的数据是不太靠谱的
        数据被保存在了客户端,随时有可能被人看走,如果将一些敏感信息比如用户名密码等信息存在cookie中,可能有安全问题

    session是服务器端技术
        数据保存在服务区端,相对来说比较稳定和安全
        占用服务器内存,所以一般存活的时间不会太长,超过超时时间就会被销毁.我们要根据服务器的压力和session 的使用情况合理设置session的超时时间,既能保证session的存活时间够用,同时不用的session可以及时销毁减少对服务器内存的占用.

   



http://www.niftyadmin.cn/n/1037877.html

相关文章

前端学习之vue简介

vue学习笔记—基础语法简介 介绍: vue是一个专注于前端UI的框架,他的主要能力是: 01.声明式的绑定。包括数据绑定、事件绑定。 02.基于组件的编程。让开发者可以把整个应用分为若干组件,从而达到分而治之的目的。 vue的特点&…

MVC MVP MVVM模式的浅谈

MVC MVP MVVM模式的浅谈 什么是MVC,MVP,MVVM模式: MVC MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表)。View(视图)显示数据(数据库记录)。Controller(控制器)处理…

强化学习笔记---入门简介

机器学习可以分为3类:有监督学习,无监督学习,强化学习; 强化学习可以解决什么问题? 概括来说,强化学习所能解决的问题为连续决策问题,就是需要连续不断做出决策才能实现最终的目标的问题。 强…

强化学习算法---Q-learning

Q-learning 算法的步骤&#xff1a; <1> 给定参数lamda和奖励矩阵R <2>令Q[]为0 <3> for each episode 3.1 随机选择初始的状态s 3.2 未达到目标状态&#xff0c;则执行以下几步&#xff1a; &#xff08;1&#xff09;在当前状态s的所有可能行为中选取一个行…

vue学习---vuex

Vuex就是用来管理状态的&#xff1b; Vuex使用Store对象&#xff0c;来保存和管理整个应用的状态。 Store对象&#xff0c;它包含以下的一些方法&#xff1a; -state&#xff0c;存储状态的 &#xff0c;&#xff08;其实就是存放数据的地方&#xff0c;所有的数据都存放在这里…

基于二分查找的抽签游戏算法的优化

基于二分查找的抽签游戏算法的优化 问题描述&#xff1a; 一个袋子里有n个纸片&#xff0c;纸片上有数字&#xff0c;你随机取出4张纸&#xff08;有放回&#xff09;&#xff0c;若四张纸的数字和为m&#xff0c;你就赢了&#xff0c;否则你就输了。连续试了几次后你都失败了…

自我学习总结之——NFV

NFV –DFC 1.什么是NFV? 网络功能虚拟化NFV(Network Functions Virtualization)在NFV出现之前设备的专业化很突出,具体设备都有其专门的功能实现,而之后设备的控制平面与具体设备进行分离,不同设备的控制平面基于虚拟机,虚拟机基于云操作系统,这样当企业需要部署新业务…

深度优先DFS搜索算法

深度优先DFS搜索 什么是深度优先搜索&#xff1f; 深度优先搜索&#xff08;DFS ,Depth-First Search&#xff09;是搜索手段之一。它从某个状态&#xff0c;不断地转移状态直到无法转移&#xff0c;然后回退到前一步的状态&#xff0c;继续转移到其他状态&#xff0c;如此不断…