zoukankan      html  css  js  c++  java
  • cookie的domain属性 用作单点登录

    最近在改一个bug单时,有个问题涉及到了cookie的domain属性,大致场景是由于不同的服务页面出现了同名的cookie但是domain域不同,导致出现了不可思议的bug。于是查询与cookie的domain属性相关的资料并记录之。

    1、什么是Cookie?

        Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制。

        Cookie是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个cookie。

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

            ①当用户访问web页面时,他的名字可以记录在Cookie中。

            ②在用户下一次访问该页面时,可以在Cookie中读取用户访问记录。

        Cookie实际上是一小段文本信息(上限为4kb)。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器可以把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务还可以根据需要修改Cookie的内容。

    2、Cookie的属性

    属性名 描述
    name           Cookie的名称,Cookie一旦创建,名称便不可更改
    value           Cookie的值,如果值为Unicode字符,需要为字符编码。如果为二进制数据,则需要使用BASE64编码
    maxAge         Cookie失效的时间,单位秒。如果为整数,则该Cookie在maxAge秒后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为-1。
    secure         该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。
    path Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。    注意最后一个字符必须为“/”。
    domain       可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”
    comment     该Cookie的用处说明,浏览器显示Cookie信息的时候显示该说明。
    version        Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范
    例如:

    document.cookie = "username=Darren;path=/;domain=.csdn.net"
    将上面代码复制在console控制台中输入,回车便可以在浏览器的cookie中查到username被存在Domain为'".csdn.net'的域名下。

    3、Cookie的Domain属性

        我们重点说一下这个Domain属性。一般在实现单点登录的时候会经常用到这个属性,通过在父级域设置Cookie,然后在各个子级域拿到存在父级域中的Cookie值。比如刚才设置的username属性,在blog.csdn.net下同样可以访问到,用户不用重新登录就可以拿到第一次登录进来时候的用户信息,因为这些用户信息都是存在父级域".csdn.net"下面,其他页面也可以拿到。

    所谓的单点登录是指用户在一个站点如www.studyez.com登录后切换到另一个站点communty.studyez.com时也自动 被community的Server判断为已经登录,反过来,只要用户在community.studyez.com登出后,切换到 www.studyez.com时后www的Server也会判断到这一用户已经登出。

     因此,当在"blog.csdn.net"这个域名下存入一个Cookie;如:

    document.cookie = "blogCookie=blog;path=/;domain=.blog.csdn.net";
    然后你会发现在mp.csdn.net下看不到blogCookie这个属性。这个就是所谓的Cookie跨域的问题。 

    总结:domain表示的是cookie所在的域,默认为请求的地址,如网址为www.study.com/study,那么domain默认为www.study.com。而跨域访问,如域A为t1.study.com,域B为t2.study.com,那么在域A生产一个令  域A  和   域B  都能访问的cookie就要将该cookie的domain设置为.study.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.study.com。注意:一般在域名前是需要加一个"."的,如"domain=.study.com"。
    ————————————————
    版权声明:本文为CSDN博主「545龙哥哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/longgege001/article/details/81274088

  • 相关阅读:
    【Linux】gvim封装至gvi命令
    unity, GUI.Button texture is black
    建了个百度贴吧:图形底层吧
    unity, imageEffect在android上不显示的问题
    3dmax fx shader, vertex color
    unity, editorWindow lose data when enter play mode
    unity, undo
    unity, editorWindow update计时
    unity, imageEffect的最后一步blit所用的shader,应该关闭zwrite和ztest
    unity, GUIStyle and Skin
  • 原文地址:https://www.cnblogs.com/yszr/p/14662408.html
Copyright © 2011-2022 走看看