cookie 订阅
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 [1]  。 展开全文
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 [1]  。
信息
外文名
Cookie
位    置
用户本地终端
别    名
小甜饼
中文名
储存在用户本地终端上的数据
目    的
辨别用户身份
复数形式
Cookies
cookie简介
Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用复杂的CGI等程序 [2]  。举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存) [2]  。
收起全文
精华内容
下载资源
问答
  • cookie
    千次阅读
    2018-09-17 10:27:54

    HTTP Cookie:
    Cookie通常也叫做网站cookie,浏览器cookie或者http cookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。
    Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经有是欧洲和美国的一些律师以保护用户隐私之名对cookie的种植宣战了。更严重的是,黑客可以通过偷取Cookie获取受害者的帐号控制权。

    2.Cookie的类别
    a.Session Cookie
    这个类型的cookie只在会话期间内有效,即当关闭浏览器的时候,它会被浏览器删除。设置session cookie的办法是:在创建cookie不设置Expires即可。
    b.Persistent Cookie
    持久型cookie顾名思义就是会长期在用户会话中生效。当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie。所以它可以记录很多用户初始化或自定义化的信息,比如什么时候第一次登录及弱登录态等。
    c.Secure cookie
    安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的。这样做大大的降低的cookie内容直接暴露在黑客面前及被盗取的概率。
    d.HttpOnly Cookie
    目前主流的浏览器已经都支持了httponly cookie。1.IE5+ 2.Firefox 1.0+ 3.Opera 8.0+ 4.Safari/Chrome。在支持httponly的浏览器上,设置成httponly的cookie只能在http(https)请求上传递。也就是说httponly cookie对客户端脚本语言(javascript)无效,从而避免了跨站攻击时JS偷取cookie的情况。当你使用javascript在设置同样名字的cookie时,只有原来的httponly值会传送到服务器。
    e.3rd-party cookie
    第一方cookie是cookie种植在浏览器地址栏的域名或子域名下的。第三方cookie则是种植在不同于浏览器地址栏的域名下。例如:用户访问a.com时,在ad.google.com设置了个cookie,在访问b.com的时候,也在ad.google.com设置了一个cookie。这种场景经常出现在google adsense,阿里妈妈之类的广告服务商。广告商就可以采集用户的一些习惯和访问历史。
    f.Super Cookie
    超级cookie是设置公共域名前缀上的cookie。通常a.b.com的cookie可以设置在a.b.com和b.com,而不允许设置在.com上,但是很不幸的是历史上一些老版本的浏览器因为对新增后缀过滤不足导致过超级cookie的产生。


    e.Zombie Cookie
    僵尸cookie是指那些删不掉的,删掉会自动重建的cookie。僵尸cookie是依赖于其他的本地存储方法,例如flash的share object,html5的local storages等,当用户删除cookie后,自动从其他本地存储里读取出cookie的备份,并重新种植。
    3.Cookie用途
    a.会话管理
    1.记录用户的登录状态是cookie最常用的用途。通常web服务器会在用户登录成功后下发一个签名来标记session的有效性,这样免去了用户多次认证和登录网站。
    2.记录用户的访问状态,例如导航啊,用户的注册流程啊。
    b.个性化信息
    1.Cookie也经常用来记忆用户相关的信息,以方便用户在使用和自己相关的站点服务。例如:ptlogin会记忆上一次登录的用户的QQ号码,这样在下次登录的时候会默认填写好这个QQ号码。
    2.Cookie也被用来记忆用户自定义的一些功能。用户在设置自定义特征的时候,仅仅是保存在用户的浏览器中,在下一次访问的时候服务器会根据用户本地的cookie来表现用户的设置。例如google将搜索设置(使用语言、每页的条数,以及打开搜索结果的方式等等)保存在一个COOKIE里。

    c.记录用户的行为
    最典型的是公司的TCSS系统。它使用Cookie来记录用户的点击流和某个产品或商业行为的操作率和流失率。当然功能可以通过IP或http header中的referrer实现,但是Cookie更精准一些。

    4. Cookie的实现
    Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server。同时在浏览器允许脚本执行的情况下,Cookie是可以被JavaScript等脚本设置的。
    a. 如何种植Cookie

    http方式:以访问http://www.webryan.net/index.php为例
    Step1.客户端发起http请求到Server

    GET /index.php HTTP/1.1
    Host: www.webryan.net
    (这里是省去了User-Agent,Accept等字段)

    Step2. 服务器返回http response,其中可以包含Cookie设置

    HTTP/1.1 200 OK
    Content-type: text/html
    Set-Cookie: name=value
    Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
    (content of page)

    Step3. 后续访问webryan.net的相关页面

    GET /spec.html HTTP/1.1
    Host: www.webryan.net
    Cookie: name=value; name2=value2
    Accept: */*

    需要修改cookie的值的话,只需要Set-Cookie: name=newvalue即可,浏览器会用新的值将旧的替换掉。

    脚本方式种植 Cookie:
    JavaScript或类似的寄宿在浏览器中的脚本语言也可以设置Cookie。在JavaScript里,可以通过document.cookie对象实现。例如:
    document.cookie = “key=newvalue”;
    b. Cookie属性
    除了name=value对以外,我们还可以设置Cookie其他属性以支持更丰富的Cookie需求,这些属性通常是浏览器用来判断如何对待cookie,何时删除、屏蔽或者如何发送name-value对给Server。也就是说无论我们设置了某个cookie的多少属性,这些Cookie属性是不会被浏览器发送回给Server的。
          a) Domain and Path
         作用:定义Cookie的生效作用域,只有当域名和路径同时满足的时候,浏览器才会将Cookie发送给Server。如果没有设置Domain和Path的话,他们会被默认为当前请求页面对应值。 举例如下:

    提问下:第一个和第三个Cookie有啥不一样??
    结论:浏览器优先匹配domain,而对于Path字段则是以匹配的方式进行判断。
    对于 1.http://docs.foo.com/accounts/index.html
            2.http://docs.foo.com/accountstest.html
                1.会带上Cookie1,2,3; 2会带上1,2
    b) Expires and Max-Age
    作用:设置浏览器何时删除Cookie
    Expires的规定格式是:“Wdy, DD-Mon-YYYY HH:MM:SS GMT”。
    相对于Expires的精准的时间设置,在RFC 2965中规范提供了一个替代方案:Max-Age:seconds,来设置cookie在设置后多长秒后失效。

    Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; expires=Tue, 15-Jan-2013 21:47:38 GMT; path=/; domain=.foo.com; httponly
    Set-Cookie: made_write_conn=1295214458; path=/; domain=.foo.com
    Set-Cookie: reg_fb_gate=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.foo.com; httponly

    第一个Cookie: 过期时间是2013年1月15日的精确时间;
    第二个:没有设置过期时间,为Session cookie.
    第三个:删除Cookie

    C) Secure and HttpOnly
    作用:设置Cookie的安全属性
    特质:Secure和HttpOnly都是没有value字段的。
    Secure字段告诉浏览器在https通道时,对Cookie进行安全加密,这样即时有黑客监听也无法获取cookie内容。
    HttpOnly字段告诉浏览器,只有在HTTP协议下使用,对浏览器的脚本不可见,所以跨站脚本攻击时也不会被窃取。 从前面例子可以看到Google和Facebook都在使用HttpOnly的Cookie。
    5. 浏览器相关
    a) Cookie规范规定浏览器最少支持300个cookie,每个cookie 4kb;每个域名最少20个cookie。
    b) 浏览器都支持删除和禁用cookie
    c) 在浏览器地址栏输入:javascript:alert(document.cookie)可以看到所有cookie
    d) 默认情况下,IE浏览器仅支持设置有P3P “CP” (Compact Policy) 标记的第三方Cookie.

    测试方法:
    javascript:for(var i=0;i<100;i++){document.cookie=’cookiename’+i+’=1aaa;’}document.cookie=’test=asdf;’;alert(document.cookie)
    测试结论:ie8:每个域名50个,firefox:每个域名150个;chrome:每个域名170个;ie6、ie7:20个

    测试方法:
    javascript:var arr=[],i=5112;while(i){i–;arr.push(‘i’)}document.cookie=’test=’+arr.join(”)+’;';alert($.cookie.get(‘test’).length)
    测试结论:
    ie8:5112+5 = 5117
    但最多10个大字段。字段内容多了的话,导致服务器无法响应。

    6.Cookie窃取及会话劫持(hijacking)
    相对很多Session验证方法的缺点和不足,大多数网站都是把Cookie当作用户的唯一标识。在这种情况下,黑客以可以通过窃取用户的cookie来模拟用户的请求行为,但对于服务器来说是无法辨别到底是来自用户还是黑客的。
    下面给出Cookie作为用户标识的风险和安全隐患:
    a. 网络监听

    在网络上传输的数据都是会被监听获取的,尤其是在公共的、非加密的网络环境(free wifi)。这些数据也包括常规的http(非https加密通道)所有session,也包括HTTP 会话里的Cookie。当黑客拿到明文的cookie之后就可以模拟用户操作,比如改密码、消费等行为。
    解决这个问题的最根本方法是采取https协议,通过SSL通道对内容及cookie进行加密。此外还有一些二次保护的方法可以作为过渡和折中。

    b. DNS cache异常及其他     DNS域名服务器
    通过DNS cache或者DNS服务商的一些漏洞问题(www.baidu.com),黑客可以通过将www.baidu.com的子域名hack.www.baidu.com指向到黑客自己的IP。这样黑客就可以通过方式http://hack.www.baidu.com/a.png图片到公共环境,从而可以获取到baidu.com下的所有cookie,包括设置了HttpOnly属性的Cookie。
    解决办法:1.减少dns无效配置 2.ISP服务商加强自我安全管理。3.通过HTTPS请求对请求进行加密和授权,这样黑客很难从凭证管理中心获得认证,那么用户在操作的时候会收到明显的提示。

    c. 跨站脚本XSS—窃取Cookie

    由于JavaScript等脚本语言可以读取页面文档内的Cookie值,同时又可以向任意服务器发出任意的请求。综合起来,黑客可以通过脚本将当前文档下的cookie据为己有。如果黑客使用的地址是https://attacker.com/stole.cgi,那么Secure Cookie也将以明文的方式发送个attacker.com.

    跨站脚本是web安全永久不变的话题。Web开发者有责任去过滤掉恶意代码。同时,HttpOnly Cookies不可以被客户端脚本读取,这就大大降低了Cookie被盗取的风险。

    d. 跨站脚本XSS—hijacking
    当黑客可以在www.test.com上插入一段JS脚本的话,那么没有禁用JS的用户很轻易的会收到hijacking攻击。黑客利用用户的浏览器来发出HTTP请求到test.com本身,所以与用户相关的所有cookie都会存在(包括HttpOnly和Secure Cookie)。例如:人人网发生的分享蠕虫。
    对于这种攻击,除了避免跨站脚本漏洞以外,可以采取验证码的方式进行一定程度上的规避。

    e. 跨站脚本XSS—代理请求
    老版本的浏览器允许用户使用XMLHttpRequest发出代理请求,黑客可以通过设置代理将本地的cookie全量的发给代理服务器,再从代理服务器转发给原始服务器。当然这是很快被禁止了。
    f. 跨站请求伪造—CSRF
    CSRF主要是黑客将伪造的请求URL放到一个图片或者其他静态资源里,这种成本极低,且传播性和形象力非常大。
    举例:Qzone的签名的修改地址是:http://qzone.qq.com/cgi-bin/modify?nick=123
    那么黑客将其并放到流量很大的论坛或者博客里。那么很多人就在不知情的情况下就执行了某些操作。

    7. Cookie的缺点和不足
    a) 被讨论最多的就是隐私问题
    b) Cookie引入的各种安全问题
    c) 与REST软件架构相背离。
    d) 状态不一致,后退导致cookie不会重置。
    c) 过多使用到是HTTP请求流量浪费

    8.Cookie的取代方案
    a) window.name
    当前所有浏览器都能通过DOM结构中的window.name存储2-32MB的数据。同时window.name是跨域名,但是只能是在当前tab里使用,每个tab初始化后都是有个空的window.name。Window.name是可以传递对象的,所以我们通过将数据保存在json里进行传递和存储。
    由于window.name不通过网络传送,所以不会存在被窃取的风险。同时所以从某种角度通过window.name进行用户行为分析更为合理,同时又不会像cookie一样引来http流量消耗
    b.)Internet Explorer userData storage (starting IE9, userData is no longer supported)

    支持:IE5-IE8
    使用:
     或者,通过脚本来设置:
    object.style.behavior = “url(‘#default#userData’)”
    object.addBehavior (“#default#userData”)
    数据:
    在XP下,一般位于C:\Documents and Settings\用户名\UserData,有些时候会在C:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\UserData。
    在Vista下,位于C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\UserData
    属性:expires 设置或者获取 userData behavior 保存数据的失效日期,不设置则为永久。
    var store = document.documentElement;
    store.addBehavior(‘#default#userdata’);
    var STORE_NAME = ‘my_userdata’;
    store.save(STORE_NAME);
    store.setAttribute(‘a’, 123);
    store.save(STORE_NAME);
    store.load(STORE_NAME);
    store.getAttribute(‘a’);
    store.removeAttribute(‘a’);
    store.save(STORE_NAME);
    c)HTML5特性
    • HTML5 Session Storage
    • HTML5 Local Storage
    • HTML5 Global Storage
    • HTML5 Database Storage via SQLite
    • Storing cookies in RGB values of auto-generated, force-cached PNGs using HTML5 Canvas tag to read pixels (cookies) back out
    • Local Shared Objects (Flash Cookies)
    • Silverlight Isolated Storage
    d)Flash Shared Object
    存在Flash的用户目录
    依赖于flash的安装
    使用数据量大100k,超过的需要用户允许
    简单操作
    var so:SharedObject = SharedObject.getLocal(key);
    so.data.value = value;//return so.data.value

    其他相关
    RFC2109:
    1.声明新增了Set-Cookie和Cookie两个HTTP头
    2.延续使用HTTP/1.1的attribute-value对
    3.Server可以在任意HTTP Header中设置cookie
    4.Server可以设置多个Set-Cookie头
    严格之处:
    1.User Agent设置domain必须满足以.开头,且y.x.qq.com不能设置到.qq.com上
    2.User Agent给服务器的是完整的Cookie
    3.Netscape支持 Expires,协议支持max-age:
    域名限制:
    1.rfc要求
    * at least 300 cookies
    * at least 4096 bytes per cookie (as measured by the characters
    that comprise the cookie non-terminal in the syntax description
    of the Set-Cookie2 header, and as received in the Set-Cookie2
    header)
    * at least 20 cookies per unique host or domain name

    更多相关内容
  • Cookie

    千次阅读 2022-02-17 16:45:40
    1、什么是cookie 2、怎样使用cookie

    什么是Cookie?


    Cookie用于存储web页面的用户信息。

    Cookie是一些数据,存储于你电脑的文本文件中。

    当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。

    Cookie的作用就是用于解决“如何记录客户端的用户信息”:

    • 当用户访问web页面时,他的名字可以记录在cookie中。
    • 在用户下一次访问该页面时,可以在cookie中读取用户访问记录。

    当浏览器从服务器上请求web页面时,属于该页面的cookie会被添加到该请求中。服务端通过这种方式来获取用户的信息。

    Cookie存储数据的方式


    1.、cookie以键值对形式存储数据,只能存储字符串,如下所示:

    username=John Doe

    2、cookie存储数据是有时效性的,如果超时 设定的时效性,浏览器会自动删除cookie

    方式1:时间时效 是 世界标准时间

    方式2:会话时效,浏览器打开 cookie 存在,浏览器关闭 cookie 删除

    3、cook有访问路径

    只有符合设定路径的文件 才能 访问调用cookie

    4、cookie 前端程序 后端程序 都可以操作访问

    5、cookie的操作设定 必须要通过 服务器运行


    Cookie的操作语法


    • PHP程序
    • JavaScript程序

    PHP设定cookie的函数方法:

    setcookie(参数1,参数2,参数3,参数4);

    参数1    键名

    参数2    键值

    参数3    时效

    参数4    路径

    只设定两个参数 键名键值

    时效没有设定,默认执行会话时效session;路径没有设定,默认执行当前文件所在文件夹路径。如下所示:

    setcookie('name' , '王昭没有君啊');

    设定 时间时效

    当前时间的时间戳 + 时效的秒数

    time() 是PHP中获取当前时间的时间戳,单位是秒

    time() + 10 时效是 当前时间 + 10秒

    time() + 24*60*60 时效是 一天,如下所示:

    setcookie('age' , 22 , time() + 24*60*60 );

    设定路径,如下所示:

    setcookie('sex' , '男' , time() + 24*60*60 , '/');

    获取

    $_COOKIE以数组的形式存储cookie键值对,如下所示:

    print_r( $_COOKIE );

    JavaScript操作cookie:

    JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。

    创建cookie,如下所示:

    document.cookie = 'name=王昭没有君啊';

    添加时间时效

    添加的cookie时间时效应该是世界标准时间,应该是当前时间 - 8小时时差,添加的时效:当前时间戳 - 8小时毫秒 + 添加时效毫秒;如果没有输入时效,也就是空字符串,会执行会话时效,如下所示:

    const time = new Date();
    time.setTime(time.getTime() - 8*60*60*1000 + 24*60*60*1000);
    document.cookie = `age=22;expires=${time}`;

    添加路径

    如果没有输入路径,也就是空字符串,会执行当前文件所在文件,如下所示:

    document.cookie = `sex=男;expires=${time};path=/`;

    在JavaScript中,可以使用以下代码来读取 cookie:

    let str = document.cookie;

    获取结果是cookie键值对,需要转化为对象

    使用 JavaScript 删除 Cookie,只需要设置 expires 参数为以前的时间,特别注意的是:设定cookie时效为负数时,cookie的键名、路径,一定要和原始cookie保持一致,否则会认为是新的cookie的设定,不是修改原始cookie的时效。如下所示:

    document.cookie = "name=王昭没有君啊;expires=-1;path=/";

    封装一个简单的cookie函数


    在实际项目中,我们不能用一遍cookie,就使用JavaScript操作一遍cookie,这样就会很繁琐,不利于开发,我们一定是把它封装为一个函数,随用随调,我把它封装在一个cookie.js文件中,如下所示:

    //封装cookie函数
    //参数1 cookie键名
    //参数2 cookie键值
    //参数3 cookie时效,默认值是空字符串,也就是没有输入时效,执行会话时效
    //参数4 cookie路径,默认值是空字符串,也就是没有输入路径,执行当前文件所在文件夹
    function mySetCookie(key, value, time='', path=''){
        //创建时间对象
        const timeObj = new Date();
        //设定时间戳
        timeObj.setTime(timeObj.getTime() - 8*60*60*1000 + time*1000);
        //设定cookie
        document.cookie = `${key}=${value};expires=${ time === '' ? '' : timeObj};path=${path}`;
    }
    
    //获取cookie函数
    function myGetCookie(){
        //定义一个空对象存储结果
        const obj = {};
        //获取cookie键值对字符串
        let str = document.cookie;
        
        //以分号空格为间隔符转化为数组
        const arr1 = str.split('; ');
        //循环遍历数组,以等号为间隔,转化为数组
        arr1.forEach(item =>{
            const arr2 = item.split('=');
            obj[arr[0]] = arr2[1];
        })
        
        //返回这个对象
        return obj;
    }

    展开全文
  • Cookie和Session的区别与联系

    万次阅读 多人点赞 2022-03-20 11:03:00
    Cookie和Session session(是jsp的内置对象) 用来实现用户会话 服务器没有办法识别每一次请求是从哪一台电脑访问的,它能接收请求,但是它不知道这个请求是从哪里来的,不知道要响应给谁。比如说我们买东西,添加...


    📃个人主页: 不断前进的皮卡丘
    🌞博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
    🔥 网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器

    Session

    Session用来实现用户会话
    Session对应类名:HttpSession(jarkata.servlet.http.HttpSession)
    Session是JSP内置的对象

    会话的理解

    用户打开浏览器,客户端和服务器之间发生的一系列连续的请求和响应,最后把浏览器关闭,这个过程叫做一次会话。会话在服务器端有对应的Java对象—Session
    以我自己对会话的理解来说,会话可以类比打电话,打一次电话是一次会话,电话挂断代表会话结束,那么同样的打开浏览器进行一系列操作,直到浏览器关闭才代表会话结束

    一次会话对应N个请求

    对于会话有了基本的理解以后,我们来看一下,它的作用是什么

    Session的作用

    保存会话状态。(用户登录成功了,这是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。)
    为什么不用request或者ServletContest来保存会话状态

    request.setAttribute()存,request.getAttribute()取,ServletContext也有这个方法。request是请求域。ServletContext是应用域。ServletContext对象是服务器启动的时候创建,服务器关闭的时候销毁,这个ServletContext对象只有一个。
    request对象的生命周期太短了。
    以在淘宝买东西作为例子:我们要买东西,先把商品加入购物车,我们是不是想要每一次请求都放在同一个购物车里面,但是request对象是一次请求一个,如果使用它的话,你会发现,每次请求放的购物车都不一样,你是不是很郁闷,所以不能使用request对象存放会话状态,如果我们使用的是ServletContext的话,那么就会变成所有用户共享一个购物车,最后你会发现购物车一堆的商品,所以也不适合。

    既然Session是用来保存会话状态的,那么我们就会有一个疑惑,为什么要用它来保存会话状态。因为客户端发送请求以后,它和服务器的连接就断开了。

    在这里插入图片描述

    这就涉及到HTTP 协议的无状态特点,相信大家可能也有困惑,所以在正式说明Session的原理以前,我先来给大家说一下,HTTP协议的无状态特点是什么意思

    HTTP协议的无状态特点

    服务器没有办法识别每一次请求是从哪一台电脑访问的,它能接收请求,但是它不知道这个请求是从哪里来的,不知道要响应给谁。比如说我们买东西,添加购物车,由于它无法识别是来自哪一个客户端的请求,它就可能把我们的请求发送给其他人,所以必须要有一种技术来让服务器知道请求来自哪里,这就是会话技术

    在这里插入图片描述

    Session的实现原理(重点)

    Session对象是存储在服务器中的
    我在下面这个图对Session对象的创建做了很清楚的说明了,我相信大家看了应该都能挺清楚的,而不是含含糊糊的。
    由于下面的图片中,出现了Session超时机制,我现在就举个例子,给大家说明一下这个机制运用的地方。比如说你本来登录淘宝想买东西,结果这个时候,家里面来客人了,你就去招待客人了,很长一段时间里面,都没有再去碰过淘宝,也就是说明,在很长一段时间里面,你都没有发送请求给服务器,这个时候,服务器就会把Session对象销毁,由于Session对象存储登录信息,你就会发现当客人走了以后,当你想要去淘宝继续买东西的时候,还需要重新登录。因为这个系统会验证你是否曾经登录过,登录过的才可以继续访问,但是Session对象是存储登录信息的,Session对象都已经销毁了,当然无法访问。
    Session超时机制简单来说就是长时间没有发送请求,服务器会销毁Session对象
    在这里插入图片描述
    大家看了上面的图应该已经有了一定的理解了吧。现在是否有一个疑惑,为什么我们每一次发送请求,它都能找到同一个Session对象,而不是找到其他对象呢。就比如说同一时间有多个人在访问淘宝网站,为什么不同的人发送请求每次都可以返回他们的Session对象,为什么不会拿到其他人的Session对象。

    大家可以想一下有什么方法可以很好的解决呢?
    其实很容易可以想到,就是标记,没错吧,通过标记,我们就可以知道要返回哪一个Session对象。
    我们可以给每一个Session对象生成一个编号,然后把这个编号发送给浏览器,在浏览器上面保存起来,那我们发送请求给服务器的时候,就能自动把编号发给服务器,服务器根据这个编号来找相应的Session对象。一个编号对应一个Session对象,这种存储方法是不是让你想到了Map集合,专业术语是Session列表

    会话状态:指的是服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器可以把属于同一次会话的一系列请求和响应关联起来–sessionid

    从一个终端发起的请求都会带有sessionid(Session对象的编号),这样我们通过id就可以标注它,服务器就知道要响应给谁,就比如说有好多人打电话给你,你手机没有来电显示,那我们是不是就得回拨电话回去,如果我们不知道电话号码不就不知道打电话给谁,但是如果显示电话号码,我们就知道打电话给谁了。

    HttpSession session = request.getSession(); --用来获取Session对象
    在这里插入图片描述

    如果在同一个浏览器打开页面,他们的sessionid是一样的

    属于同一次会话的请求都有一个相同的标识符:sessionid

    在这里插入图片描述
    在这里插入图片描述
    其实sessionid是被包装成Cookie发送给浏览器的(后面会说,大家先有个印象)

    Session实现原理总结
    session的实现原理: 有缓存
    JSESSIONID=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的。浏览器只要关闭。这个cookie就没有了。
    session列表是一个Map,map的key是sessionid,map的value是session对象。
    用户第一次请求,服务器生成session对象,同时生成id,将id发送给浏览器。
    用户第二次请求,自动将浏览器内存中的id发送给服务器,服务器根据id查找session对象。
    关闭浏览器,内存消失,cookie消失,sessionid消失,会话等同于结束。

    Session常用方法:

    Session在实际开发中是用来记录我们的用户信息的,我们不需要每一次访问都输入用户名和密码,如果登录过一次,后面可以不用再输入,但是这是有一个周期的,不可能一直存着的,默认失效时间为1800秒

    方法作用
    String getId()获取sessionID
    void setMaxInactiveInterval(int interval)设置session的失效时间,时间单位为秒
    int getMaxInactiveInterval()获取当前session的失效时间
    void invalidate()设置session立即失效,也就是销毁session对象(比如说登录一个网站以后,点击退出,我们就可以用这个方法)
    void setAttribute(String key,Object value)通过键值对的形式存储数据(这个方法类似于map的put方法,可以用来存储数据,也可以用来修改数据,如果用来修改数据的话,前后两次的key要相同)
    Object getAttribute(String key)通过键来获取对应的数据
    void removeAttribute(String key)通过键来删除对应的数据
    <%--
      Created by IntelliJ IDEA.
      User: 17614
      Date: 2022-03-20
      Time: 11:20
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%
        String id = session.getId();
        int interval = session.getMaxInactiveInterval();
    %>
    <%="sessionid=" + id%><br>
    <%="失效时间:" + interval%>
    </body>
    </html>
    
    

    在这里插入图片描述
    还有一种方式可以查明Session的默认失效时间
    我们可以找到当时Tomcat的安装目录,点击config,找到web.xml
    发现里面有这样的代码,说明Session默认失效时间是30分钟

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

    实现会话的两种方式:

    cookie是浏览器提供用来存储用户信息,session是Java程序提供的,他们都可以存储信息,都可以描述一次会话,会话是客户端和服务端的交互,session作用于服务端,cookie作用于客户端
    那么我们接下来来讲一下Cookie

    Cookie

    基本介绍

    session的实现原理中,每一个session对象都会关联一个sessionid,例如:在这里插入图片描述

    • JSESSIONID=3D537CF1206DCEEBD38E8287472C21C2
    • 以上的这个键值对数据其实就是cookie对象。
    • 对于session关联的cookie来说,这个cookie是被保存在浏览器的“运行内存”当中。
    • 只要浏览器不关闭,用户再次发送请求的时候,会自动将运行内存中的cookie发送给服务器。
    • 例如,这个Cookie: JSESSIONID=3D537CF1206DCEEBD38E8287472C21C2就会再次发送给服务器。
    • 服务器就是根据3D537CF1206DCEEBD38E8287472C21C2这个值来找到对应的session对象的。

    那么cookie怎么生成?cookie保存在什么地方?cookie有啥用?浏览器什么时候会发送cookie,发送哪些cookie给服务器?

    • cookie最终是保存在浏览器客户端上的。

      • 可以保存在运行内存中。(浏览器只要关闭cookie就消失了。)
      • 也可以保存在硬盘文件中。(永久保存。)

    Cookie(Java的一个类)
    存储数据的形式和map差不多,以键值对的形式存储数据
    Cookie在客户端存储,Session在服务端存储
    Cookie是服务端在HTTP响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某一个Cookie,在之后的请求和响应过程中,会将此Cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互,归根到底来说,之所以要有Cookie和Session机制,是因为HTTP协议无状态无连接协议。

    经典案例

    • 京东商城,在未登录的情况下,向购物车中放几件商品。然后关闭商城,再次打开浏览器,访问京东商城的时候,购物车中的商品还在,这是怎么做的?我没有登录,为什么购物车中还有商品呢?

      • 将购物车中的商品编号放到cookie当中,cookie保存在硬盘文件当中。这样即使关闭浏览器。硬盘上的cookie还在。下一次再打开京东商城的时候,查看购物车的时候,会自动读取本地硬盘中存储的cookie,拿到商品编号,动态展示购物车中的商品。
        • 京东存储购物车中商品的cookie可能是这样的:productIds=xxxxx,yyyy,zzz,kkkk
        • 注意:cookie如果清除掉,购物车中的商品就消失了。
    • 126邮箱中有一个功能:十天内免登录

      • 这个功能也是需要cookie来实现的。
      • 怎么实现的呢?
        • 用户输入正确的用户名和密码,并且同时选择十天内免登录。登录成功后。浏览器客户端会保存一个cookie,这个cookie中保存了用户名和密码等信息,这个cookie是保存在硬盘文件当中的,十天有效。在十天内用户再次访问126的时候,浏览器自动提交126的关联的cookie给服务器,服务器接收到cookie之后,获取用户名和密码,验证,通过之后,自动登录成功。
        • 怎么让cookie失效?
          • 十天过后自动失效。
          • 或者改密码。
          • 或者在客户端浏览器上清除cookie。
          • cookie机制和session机制其实都不属于java中的机制,实际上cookie机制和session机制都是HTTP协议的一部分。php开发中也有cookie和session机制,只要是你是做web开发,不管是什么编程语言,cookie和session机制都是需要的。
    • HTTP协议中规定:任何一个cookie都是由name和value组成的。name和value都是字符串类型的。

    • 在java的servlet中,对cookie提供了哪些支持呢?

      • 提供了一个Cookie类来专门表示cookie数据。jakarta.servlet.http.Cookie;
      • java程序怎么把cookie数据发送给浏览器呢?response.addCookie(cookie);
    • 在HTTP协议中是这样规定的:当浏览器发送请求的时候,会自动携带该path下的cookie数据给服务器。(URL。)

    创建cookie Cookie cookie=new Cookie(String name,String value);
    response.addCookie(cookie); 每一个浏览器都有不同的cookie

    <%
    //    public Cookie(String name, String value)
        Cookie cookie=new Cookie("name","张三");
        response.addCookie(cookie);
    //    读取cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie1 :cookies) {
            out.write(cookie1.getName()+": "+cookie1.getValue()+"<br>");
    
        }
    
    %>
    

    在这里插入图片描述

    Cookie常用方法

    方法用途
    void setMaxAge(int age)设置Cookie的有效时间,单位为秒
    int getMaxAge()获取Cookie的有效时间
    String getName/()获取Cookie的name
    String getValue()获取Cookie的value

    Session和Cookie的区别

    Session:保存在服务器,Session是一个对象保存在Java虚拟机中
    保存的数据是Object
    随着会话的结束而销毁
    保存重要信息

    Cookie:保存在浏览器
    只能保存String类型,类似于文本文件,存放的都是数据,而不是对象
    可以长期保存在浏览器,与会话无关
    保存不重要信息

    存储用户信息:
    Session:setAttribute(name,“admin”) 存
    getAttribute(name) 取
    生命周期:服务端:只要WEB应用重启或者销毁
    客户端:只要浏览器关闭就销毁
    退出登录:session.invalidate();
    Cookie:
    Cookie cookie=new Cookie(name,“admin”);
    response.addCookie(cookie); 存

    取数据

    	Cookie[] cookies=request.getCookie();
     		for(Cookie cookie:cookies){
    				if(cookie.getName().equals("name"){
    						out.write("欢迎回来"+cookie.getValue());
    			}
    }
    

    生命周期:不会随着服务端的重启而销毁,客户端:默认是只要关闭浏览器就会销毁,我们通过setMaxAge()方法来设置有效期,一旦设置了有效期,就不会随着浏览器的关闭而销毁,而是由设置的时间来决定
    退出登录:setMaxAge(0)

    Cookie是浏览器提供的一种技术,通过服务器的程序能把一些只须保存在客户端,或者在客户端进行处理的数据放在本地计算机上,不需要通过网络传送,因此提高网页处理效率,并且可以减少服务器的负载,但是因为Cookie是服务器端保存在客户端的信息,所以它的安全性也是很差的,例如:常见的记住密码就可以通过Cookie来实现

    如果想要把Cookie随着响应发送到客户端,需要先添加到response对象中

    cookie默认是关闭浏览器失效

    Cookie的有效时间取值

    负整数:表示不存储该cookie
    cookie的maxAge属性的默认值是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么cookie就会消失
    正整数:若大于0的整数,表示存储的秒数,表示cookie对象可存活的指定的秒数,当生命>0,浏览器会把cookie保存到硬盘,就算关闭浏览器,或者重启客户端电脑,cookie也会存活相应的时间
    若为0
    表示删除该cookie,cookie的生命=0是一个特殊值,表示cookie作废,也就是说如果原来浏览器已经保存了这个cookie,那么可以通过cookie的setMaxAge(0)来删除这个cookie,无论在浏览器中还是在客户端硬盘中都会删除这个Cookie

    cookie注意点

    1.cookie保存在当前浏览器,不能跨浏览器,更不用说换电脑了
    2.cookie存中文问题
    cookie不能存中文,如果有中文,则通过URLEncoder.encode()来进行编码
    通过URLDecoder.decode()进行解码
    在这里插入图片描述
    3.同名cookie问题
    如果服务器发送重复的cookie,那么会覆盖原来的cookie
    4.cookie的数量
    不同浏览器对cookie有限定,cookie的存储是有上限的,cookie存储在客户端(浏览器)的,而且一般是由服务器创建和指定,后期结合Session来实现会话追踪

    Cookie的路径问题

    Cookie的setPath(可以设置cookie的路径,这个路径直接决定服务器的请求是否会从浏览器中加载某些cookie

    情景一:当前服务器下的任何项目的任意资源都可以获取Cookie对象

    	//当前项目路径s
    	Cookie cookie=new Cookie("xxx","xxx");
    	//设置路径为"/",表示在当前项目下的任何项目都可以访问到cookie对象
    	
    	cookie.setPath("/");
     	response.addCookie(cookie);
    

    情景二:当前项目下的资源都可获取Cookie对象(默认不设置Cookie的path)

    当前项目路径s
    Cookie cookie=new Cookie("xxx","xxx");
    //设置路径为"/s",表示在当前项目下的任何项目都可以访问到cookie对象
    //默认情况下可以不设置path的值
    cookie.setPath("/s");
     	response.addCookie(cookie);
    
    

    情景三:指定项目下的资源可获取Cookie对象

    当前项目路径s
    Cookie cookie=new Cookie("xxx","xxx");
    //设置路径为"/s2",表示在s2项目下才可以访问到
    cookie.setPath("/s2");
    //只能在s2项目下获取cookie,就算cookie是s产生的,s也不能获取它
     	response.addCookie(cookie);
    

    情景四:指定目录下的资源可获取Cookie对象

    //当前项目路径s
    Cookie cookie=new Cookie("xxx","xxx");
    //设置路径为/s/cook,表示在s1/cook目录下面才可以访问到cookie对象
    cookie.setPath("/s/cook");
    response.addCookie(cookie);
    

    Cookie禁用问题

    Cookie禁用了,session还能找到吗?

    cookie禁用就是说服务器正常发送cookie给浏览器,但是浏览器不要了。拒收了。并不是服务器不发了。
    找不到了。每一次请求都会获取到新的session对象。
    cookie禁用了,session机制还能实现吗?
    可以。需要使用URL重写机制。
    http://localhost:8080/servlet12/test/session;jsessionid=19D1C99560DCBF84839FA43D58F56E16
    URL重写机制会提高开发者的成本。开发人员在编写任何请求路径的时候,后面都要添加一个sessionid,给开发带来了很大的难度,很大的成本。所以大部分的网站都是这样设计的:如果禁用cookie,就别用了。

    展开全文
  • Cookie详解

    千次阅读 2021-11-23 10:37:35
    Cookie属性 上图是Chrome浏览器中的Cookie截图,cookie的属性:Name、Value、Domain、Path、Expires/Max-age、Size、HttpOnly、Secure、SameSite、SameParty、Priority。下面依次介绍这些属性。 Name Name是Cookie...


    Cookie属性

    在这里插入图片描述
    上图是Chrome浏览器中的Cookie截图,cookie的属性:Name、Value、Domain、Path、Expires/Max-age、Size、HttpOnly、Secure、SameSite、SameParty、Priority。下面依次介绍这些属性。

    1.Name

    Name是Cookie的名称,Cookie一旦创建,名称便不可更改,一般名称不区分大小写。

    2.Value

    Value是cookie名称Name对应的Cookie的值,如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。

    3.Domain

    指定Cookie的有效域,决定在向该域发送请求时是否携带此Cookie。Domain属性的默认值是创建cookie的网页所在服务器的主机名。不能将一个cookie的域设置成服务器所在的域之外的域。Domain的设置是对子域生效的,如Doamin设置为 .a.com,则b.a.com和c.a.com均可使用该Cookie,但如果设置为b.a.com,则c.a.com不可使用该Cookie。

    注意:在RFC2109规范,没有前导点的域意味着不能在子域上使用它,而只有一个前导点(.a.com)允许跨子域使用。然而,现代浏览器尊重更新的规范RFC6265,并将忽略任何前导点,这意味着您可以在子域和顶级域上使用cookie。如果你设置了一个cookie的Domain为a.com,那么b.a.com、c.a.com都可以使用该cookie。

    在tomcat8.5版本后Domain规则:

    1. 必须是1-9、a-z、A-Z、. 、- (注意是-不是_)这几个字符组成
    2. 必须是数字或字母开头
    3. 必须是数字或字母结尾

    Tomcat更换默认的 CookieProcessor 实现为 Rfc6265CookieProcessor ,之前的实现为 LegacyCookieProcessor 。

    LegacyCookieProcessor 主要是实现了标准RFC6265, RFC2109 和 RFC2616,而Rfc6265CookieProcessor是实现了标准RFC6265。

    Rfc6265CookieProcessor拼接Domain时增加了对domain 的校验(Rfc6265CookieProcessor类的validateDomain(String domain)方法),即必须以数字或者字母开头,必须以数字或者字母结尾,不支持Domain以.开头。

    如果一定要支持设置.开头的Domain,有一下几种方式:

    1. 直接修改Tomcat安装目录下的conf\context.xml文件,指定cookie处理器为 org.apache.tomcat.util.http.LegacyCookieProcessor

       <Context>
          <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
       </Context>
      
      
    2. 如果使用的是SpringBoot,直接指定容器中的cookie处理器。

      @Bean
      public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
          return (factory) -> factory.addContextCustomizers((context) -> 
                  context.setCookieProcessor(new LegacyCookieProcessor()));
      }
      

    domain对浏览器写入cookie的影响(例如当前域为a.test.com):

    传入domain值写入结果写入domain值
    成功a.test.com
    a.test.com成功.a.test.com
    .a.test.com成功.a.test.com
    b.test.com失败
    .b.test.com失败
    test.com成功.test.com
    .test.com成功.test.com
    www.test.com失败
    www.qq.com失败

    归纳总结:

    1. 不传domain,默认当前域名;
    2. 只要传了domain,如果不是以.开头,都会强制在前面加上一个.,不管是一级还是二级域名;
    3. domain只能“小于等于”当前域名,否则写入不成功;

    其他注意事项:

    • .test.com下的cookie在a.test.com下可以获取到(也就是说可以被下级域名正确获取到),但是test.com下的cookie在a.test.com下获取不到。

    4.Path

    指定Cookie的有效路径,和Domain类似,也对子路径生效,如Cookie1和Cookie2的Domain均为a.com,但Path不同,Cookie1的Path为 /b/,而Cookie的Path为 /b/c/,则在a.com/b页面时只可以访问Cookie1,在a.com/b/c页面时,可访问Cookie1和Cookie2。Path属性需要使用符号“/”结尾。

    5.Expires/Max-age

    Expires和Max-age均为Cookie的有效期,Expires是该Cookie被删除时的时间戳,格式为GMT,若设置为以前的时间,则该Cookie立刻被删除,并且该时间戳是服务器时间,不是本地时间!若不设置则默认页面关闭时删除该Cookie。

    Max-age也是Cookie的有效期,但它的单位为秒,即多少秒之后失效,若Max-age设置为0,则立刻失效,设置为负数,则在页面关闭时失效。Max-age默认为 -1。
    注意:如果max-age为0,则表示删除该cookie。cookie机制没有提供删除cookie的方法,因此通过设置该cookie即时失效实现删除。

    6.Size

    Size是此Cookie的大小。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。各个浏览器对Cookie的最大值和最大数目有不同的限制。

    浏览器Cookie最大条数Cookie最大长度(单位:字节)
    IE504095
    Chrome1504096
    FireFox504097
    Opera304096
    Safari无限制4097

    7.HttpOnly

    用于避免cookie被Javascript访问,值为 true 或 false,默认false。若设置为true,则不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见,但在发送请求时依旧会携带此Cookie。

    8.Secure

    Cookie的安全属性,用于指定cookie需要通过安全Socket层连接传递。值为 true 或 false,默认值false,若设置为true,则浏览器只会在HTTPS和SSL等安全协议中传输此Cookie,不会在不安全的HTTP协议中传输此Cookie。

    9.Priority

    优先级,chrome的提案,定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除。
    在3其他浏览器中,不一定存在Priority属性。

    10.SameSite

    SameSite用来限制第三方 Cookie,从而减少安全风险。它有3个属性,分别是:

    1. Strict
      Scrict最为严格,完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie
    2. Lax
      Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
    3. None
      网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

    11.SameParty

    暂无

    Cookie的传输

    浏览器将cookie信息以name=value对的形式存储于本地,每当请求新文档时,浏览器将发送Cookie,目的是让Server可以通过HTTP请求追踪客户。所以从WEB性能的角度来说我们要尽量的减小cookie,以达到传输性能的最大化。

    浏览器对于Web服务器应答包头中Cookie的操作步骤:

    1. 从Web服务器的应答包头中提取所有的cookie。
    2. 解析这些cookie的组成部分(名称,值,路径等等)。
    3. 判定主机是否允许设置这些cookie。允许的话,则把这些Cookie存储在本地。

    浏览器对Web服务器请求包头中所有的Cookie进行筛选的步骤:

    1. 根据请求的URL和本地存储cookie的属性,判断那些Cookie能被发送给Web服务器。
    2. 对于多个cookie,判定发送的顺序。
    3. 把需要发送的Cookie加入到请求HTTP包头中一起发送。

    Cookie的编解码

    cookie的名/值中的值不允许包含分号,逗号和空格符,为了最大化用户代理和服务器的兼容性,任何被存储为 cookie 值的数据都应该被编码,例如用我们前端熟知的js全局函数encodeURIComponent编码和decodeURIComponent解码。

    Cookie的弊端

    每次新的请求,浏览器都会发送Cookie到服务器,导致WEB性能下降。所以不建议将cookie作为客户端存储一种实现方案。

    同一Cookie认定

    1. name、domain、path这三个参数的值都相同,才属于同一cookie;
    2. name、domain、path这三个参数只要有一个的值不同,都不属于同一cookie;

    Cookie的删除

    cookie机制没有提供删除cookie的方法,因此通过设置该cookie即时失效实现删除。
    max-age为0,或者Expires为一个已过期时间,则表示删除该cookie。

    常见cookie删除无效问题:
    一般是因为删除时指定的name、domain、path这三个参数的值与需要删除的cookie这三个参数的值有不同。

    展开全文
  • Cookie技术

    千次阅读 2021-12-15 19:43:11
    什么是 Cookie? 1、Cookie 翻译过来是饼干的意思。 2、Cookie 是服务器通知客户端保存键值对的一种技术。 3、客户端有了 Cookie 后,每次请求都发送给服务器。 4、每个 Cookie 的大小不能超过 4kb 5、cookie是保存在...
  • iOS之深入解析WKWebView的cookie管理

    千次阅读 2021-07-24 02:25:56
    一、Cookie 概述 在浏览内核加载网络资源的过程中,往往离不开 HTTP 协议,它是在 Web 上进行数据交换的基础,同时也是一种无状态的 client-server 协议,这种无状态的属性促使许多端存储技术产生,其中最重要的...
  • Cookie详解 什么是 CookieCookie 是一些数据, 存储于你电脑上的文本文件中。 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。 Cookie 的作用就是用于解决 “如何记录客户端的...
  • 提取谷歌游览器Cookie的五重境界

    万次阅读 多人点赞 2022-01-23 19:45:40
    经常玩爬虫的童鞋都知道cookie的重要性,目前为止大部分网站都仍然使用cookie标识登录状态,只有少部分网站升级到使用jwt记录登录状态。 提取cookie作用不言而喻,那么提取cookie有哪些高端的操作呢?请观看: 文章...
  • Cookie是什么 cookie的中文翻译是曲奇,小甜饼的意思。cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。 Cookie有什么用 我们想象一个场景,当我们打开一个网站时,如果这个网站...
  • cookie实现单点登录

    万次阅读 2021-11-07 12:45:10
    关于cookie,想必大家也很熟悉了,cookie中可以存储会话信息,将用户的基本信息存储进去之后,就可以在前后端交互中进行传输了 本篇将分享基于cookie如何实现单点登录,本篇以实际案例为主进行演示 业务背景 以一个...
  • 前端cookie详解

    千次阅读 2022-01-26 20:46:11
    cookie在前端还是比较总重要的,接下来将总结一下cookie知识点。 将从以下方面去聊一聊cookie。 1、什么样的数据适合放到cookie中。 2、cookie是如何设置的。 3、cookie如何进行携带传送给服务器的。 4、cookie如何...
  • 前端网络基础 - Cookie

    千次阅读 2022-02-28 19:30:52
    expires和max-age的区别 expires取值要求 max-age取值要求 expires和max-age的优先级 cookie有效期的对于cookie的影响 cookie的作用范围 domain path cookie的安全限定 document.cookie引发的cookie安全问题及解决...
  • 当浏览器全面禁用三方 Cookie

    万次阅读 2022-03-03 00:50:08
    关注公众号前端开发博客,领27本电子书回复加群,自助秒进前端群苹果公司前不久对 Safari 浏览器进行一次重大更新,这次更新完全禁用了第三方 Cookie,这意味着,默认情况下,各大...
  • java设置cookie,添加cookie数据,读取cookie数据,修改cookie数据,删除cookie数据
  • Cookie起源与发展

    千次阅读 多人点赞 2019-07-17 18:21:43
    上一篇我们在讲优酷弹幕爬虫的时候,引入了一个新的知识点:Cookie,由于篇幅有限当时只是简单的给大家介绍了一下它的作用,今天我们就来全面了解一下Cookie(小饼干)以及相关的知识! 相信很多同学肯定听过Cookie...
  • 一、Session 与 Cookie cookie 与 session 应用于互联网中的一项基本技术——会话(客户端与服务端的交互)跟踪技术,用来跟踪用户的整个会话。简单来说,cookie 是通过在客户端记录信息确定用户身份的,而 session ...
  • 会话技术之Cookie详解

    千次阅读 多人点赞 2020-04-15 19:09:29
    Cookie熟练掌握了?还不进来看看,一文详解Cookie
  • cookie和session的详解和区别

    千次阅读 多人点赞 2020-02-03 10:10:34
    常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候...
  • cookie注入

    千次阅读 2022-04-16 15:10:47
    cookie注入 一.原理 ♦cookie注入的原理是:就要修改cookie的值, ♦cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交了,而一般的注入我们是使用get或者post方式提交,get方式...
  • 认识Cookie与Session的区别与应用

    千次阅读 2022-01-30 01:24:52
    大家好,我是漫步,来熟悉一下比较基本的Cookie和Session概念。通常我们所说的浏览器自动保存密码,下次不用登陆,网页换皮肤,用户引导,提示一次就不再出现的内容,大部分通过cooki...
  • 前端cookie和后端cookie

    千次阅读 2020-12-23 16:49:04
    >[success] ## 后端向浏览器中添加Cookie **后端**可以向**浏览器中**添加**Cookie**, 浏览器会在**添加Cookie**的那次在**Response Header**中添加一个**Set-Cookie**的属性,里面的值的格式就是**key=value**,在...
  • 浏览器Cookie详解

    千次阅读 2020-10-15 23:26:22
    一、了解 Cookie Cookie最开始被设计出来是为了弥补HTTP在状态管理上的不足。HTTP协议是一个无状态协议,客户端向服务器发请求,服务器返回响应,故事就这样结束了,但是下次发请求如何让服务端知道客户端是谁呢?...
  • 什么是cookie?session和cookie有什么区别?】 每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是...
  • 青龙面板搭建和手机京东Cookie获取最新方法 条件和目的 一台服务器,自己趁活动时买一台就好,这里不做推荐。 可以用此脚本自动赚取京豆。 安装docker 详细安装步骤请点这里 # 获取 wget ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 784,522
精华内容 313,808
关键字:

cookie