• Cookie和Session


    HTTP是无状态协议。意思是,同一个用户使用不同的连接访问服务器,那么服务器并不会认为他是同一个用户。

    这也难怪,因为TCP/IP模型没有会话层,因此需要应用层的协议自行实现。

    而Cookie和Session就是来实现识别用户的功能。

    Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

    1 Cookie机制

    cookie的功能是有浏览器和服务器协商实现的。当然还是需要操作系统。

    当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中Set-Cookie,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置。

    当客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。

    浏览器不会对cookie做任何更改,会原封不动的发送回服务器

    格式:

    Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure][;HTTP-Only]

    value 部分,通常是一个 name=value 格式的字符串,实际上,可以指定一个不含等号的字符串,它同样会被存储。

    当存在多个cookie时,用分号和空格隔开:

    Cookie: name=value; name1=value1; name2=value2

    expires选项:不设置cookie过期时间,cookie会在会话结束后销毁,称为会话cookie。如果想将会话cookie设置为持久cookie,只需设置一下cookie的过期时间即可。持久cookie是无法改成会话cookie,除非删除这个cookie,然后重新建立这个cookie。

    domian选项:设置了cookie的域,只有发向这个域的http请求才能携带这些cookie。一般情况下domain会被设置为创建该cookie的页面所在的域名。

    像 Yahoo! 这种大型网站,都会有许多 name.yahoo.com 形式的站点(例如:my.yahoo.com, finance.yahoo.com 等等)。将一个 cookie 的 domain 选项设置为 yahoo.com,就可以将该 cookie 的值发送至所有这些站点。浏览器会把 domain 的值与请求的域名做一个尾部比较(即从字符串的尾部开始比较),并将匹配的 cookie 发送至服务器。

    path选项:和domain选项类似,只有包含指定path的http请求才能携带这些cookie。这个比较通常是将 path 选项的值与请求的 URL 从头开始逐字符比较完成的。如果字符匹配,则发送 Cookie 消息头,

    set-cookie:namevalue;path=/blog

    所以包含/blog的http请求都会携带cookie信息。

    secure该选项只是一个标记而没有值。只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。这种 cookie 的内容具有很高的价值,如果以纯文本形式传递很有可能被篡改。

    事实上,机密且敏感的信息绝不应该在 cookie 中存储或传输,因为 cookie 的整个机制原本都是不安全的。

    HTTP-Only:的意思是告之浏览器该 cookie 绝不能通过 JavaScript 的 document.cookie 属性访问。设计该特征意在提供一个安全措施来帮助阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为。

    过期时间:

    1. 会话 cooke (Session cookie) 在会话结束时(浏览器关闭)会被删除。
    2. 持久化 cookie(Persistent cookie)在到达失效日期时会被删除。
    3. 如果浏览器中的 cookie 数量达到限制,那么 cookie 会被删除以为新建的 cookie 创建空间。

    问题:

    实际上,Cookie中保存的用户名、密码等个人敏感信息通常经过加密,很难将其反向破解,但是可以直接通过偷取的Cookie骗取网站信任

    跨站Cookie恰恰就是用户隐私泄露的罪魁祸首,所以限制网站使用跨站Cookie,给用户提供禁止跟踪(DNT)功能选项

    2 Session机制

    Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

    Session技术则是服务端的解决方案,它是通过服务器来保持状态的。

    通常,session是依赖cookie的,当用户访问某一站点时,服务器会为这个用户产生唯一的session_id,并把这个session_id以cookie的形式发送到客户端,以后的客户端的所有请求都会自动携带这个cookie(前提是浏览器支持并且没有禁用cookie)。

    禁用cookie时如何使用session:

    session没有单独的HTTP字段,因此他的传输是依赖于cookie的,但是当服务器禁用了cookie的时候,那么session在刚开始,第一次访问的时候,就没有办法做到自动登录。

    但是在用户登录以后,服务器端找到对应的session,或是新生成一个session,然后将该session返回给客户端,然后修改客户端的请求连接,将所有的请求连接中都带上session,例如get中作为后缀加上。

  • 相关阅读:
    设置ios中imageView图片自适应,
    IOS应用之间调用
    XCode debug中添加查找debug和控制台的办法
    初学Java scirpt(判断、循环语句)
    Java Script 字符串操作
    初学 Java Script (算数运算及逻辑术语)
    Ubuntu 配置JDK
    SQL Server 跨库复制表方法小笔记
    Ubuntu 重装 mysql
    Java Script 数组操作
  • 原文地址:https://www.cnblogs.com/perfy576/p/8582999.html
Copyright © 2020-2023  润新知