Cookie

作者: 雪山飞狐_91ae | 来源:发表于2018-06-21 21:42 被阅读75次

    现在的web站点希望能够提供个性化的接触,它们希望对连接另一端的用户有更多的了解,并且能在用户浏览页面时对其进行跟踪。比如说Amazon.com这样的流行在线商店可以通过以下几种方式实现站点的个性化:

    • 个性化的问候
      专门为用户生成的欢迎词和页面内容,使用户感觉更加亲切。
    • 有的放矢的推荐
      通过了解客户的兴趣,商店可以推荐一些他们认为客户会感兴趣的商品。
    • 管理信息的存档
      在线购物的用户不喜欢一次又一次的填写繁琐的地址和信用卡信息。有些站点会将这些信息存储在一个数据库中,只要他们识别出用户就可以使用存档的信息,使得购物体验更加便捷。
      HTTP识别用户有下列技巧。
    • 承载用户身份信息的HTTP首部。
    • 通过用户的IP地址进行识别。
    • 用户登录,用认证方式来识别用户。

    1.HTTP首部

    承载用户相关信息的HTTP首部:

    首部名称 首部类型 描述
    From 请求 用户的E-mail地址
    User-Agent 请求 用户的浏览器软件
    Referer 请求 用户是从这个页面上依照链接跳转过去的
    Authorization 请求 用户名和密码
    Client-IP 扩展请求 客户端IP地址
    Cookie 扩展请求 服务器产生的ID标签

    From首部包含了用户的E-mail地址,每个用户都有不同的E-mail所以在理想情况下这个首部可以用来识别用户,但是由于用户的E-mail地址太过隐私,一般都不会发送。
    User-Agent首部可以将用户所用浏览器的信息告知服务器,包括程序名称和版本,但是这个对于识别用户作用不大。
    Referer首部可以告诉服务器是从哪个页面上跳转过来的,它可以说明用户之前访问过哪个页面,通过它可以更好的理解用户的浏览行为,了解用户的兴趣。
    From,User-Agent,Referer首部都不足以实现可靠的识别。

    2.客户端IP地址

    用户的IP地址一般很少变化,在HTTP首部并不提供客户端IP地址,但是we服务器可以找到承载HTTP请求的TCP连接另一端的IP地址,所以通过客户端IP地址去识别用户看起来是可行的。
    但是这种方法存在的几个缺点限制了其作为客户端识别手段的应用:

    • 很多因特网服务提供商会动态分配IP地址。这样其就不能作为识别手段了。
    • HTTP代理和网关通常会打开一些新的到原始服务器的TCP连接,web服务器看到的将是代理服务器的IP地址,而不是客户端的。

    3.用户登录

    如果服务器希望在为用户提供对站点的访问之前,先行登录,可以向浏览器回送一条401 Login Required。然后浏览器会显示一个登录对话框,并用Authorization首部在下一条对服务器的请求中提供这些信息。
    但是这个方法的缺点在于,如果要访问很多web站点时,将是非常繁琐的,可能每个站点对于密码格式的要求都不一样,因此要记住很多密码,对于每天要访问很多web站点的人来说,这是非常头疼的一件事。

    4.Cookie

    Cookie是当前识别用户。实现持久会话的最好方式。

    Cookie是如何工作的

    用户首次访问web站点时,web服务器对用户一无所知。web服务器希望这个用户会再次回来,所以想给这个用户加上一个独有的Cookie。这样以后它就可以识别出这个用户了。Cookie中包含一个由名值对这样的信息构成的任意列表,并通过Set-Cookie或Set-Cookie2HTTP响应首部将其贴到用户身上。


    Cookie工作原理.png

    浏览器会记住从服务器返回的Set-Cookie或Set-Cookie2首部中的Cookie内容,并将Cookie集存储在浏览器的Cookie数据库中。将来用户返回同一站点时,浏览器会挑中那个服务器贴到用户上的那些Cookie,并在一个Cookie请求首部中将其传回去。

    版本0的Set-Cookie首部

    Set-Cookie首部有一个强制性的cookie名和cookie值。后面跟着可选的cookie属性,中间由;隔开。

    Set-Cookie属性 描述及实例
    NAME=VALUE 强制的,例:id="adcdef"
    Expires 可选的。这个属性会指定一个日期字符串,用来定义Cookie的实际生存期,一旦到了过期日期,就不再存储或发布咋合格cookie了。eg:Set-Cookie:foo=bar;expires=Wednesday,09-Nov-99 23:12:40 GMT
    Domain 可选的。服务器发送这个字段的意思是告诉浏览器只向这个域指定的服务器发送cookie,而不是向所有的服务器发送Cookie,如果没有指定的域,就默认为产生Set-Cookie响应的服务器的主机名。eg:Set-Cookie:foo=bar;domain=@“joes-hardware.com
    path 可选的。通过这个属性可以为服务器上特定的文档分配Cookie。eg:foo=bar;path=/orders
    Secure 可选的。如果包含了这个属性,则只有在HTTP使用SSL时才会发送cookie。eg:Set-Cookie:foo=bar;secure

    相关文章

      网友评论

        本文标题:Cookie

        本文链接:https://www.haomeiwen.com/subject/ptgcyftx.html