zoukankan      html  css  js  c++  java
  • cookie浅谈

    cookie是Web服务器识别客户端的一种方法,一个服务器可能会同时与数千个不同的客户端进行对话,识别不同客户端是非常有必要的,常见的使用场合如网站去识别不同用户,给予不同反馈(如广告的相关推荐,个性化问候,信息管理等)。

    cookie大致分为两种:会话cookie和持久cookie。会话cookie生存周期是一次会话过程,当用户退出浏览器时,会话cookie就会被删除。持久cookie的生存周期取决于设置的时间,它们被存储在硬盘上,用户退出浏览器它们不会消失。

    用户首次访问Web站点时,服务器会在响应首部里加入Set-Cookie属性来标识客户端,格式如下:

    cookie名-值键值对是强制规定必须设置的,其他属性可选,中间由分号隔开。注意一个Set-Cookie字段只能设置一个cookie,设置多个 cookie,需要添加多个的Set-Cookie字段。

    客户端获取到cookie后,会将其存储在浏览器的cookie数据库中,再次访问时会在请求首部里添加Cookie字段,将保存的cookie发送给服务器端,这样服务器就能识别出客户端了。cookie的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。cookie经常被滥用当做存储工具,由于前端也可以用js来设置cookie,一些不需要被发送到服务器端的数据也会被存储在cookie中发送过去,这无疑增大了网络开销。cookie的本质作用是让服务器识别客户端,我们经常拿cookie跟session作比较,其实Session机制本身就可以通过cookie来实现。

    Session是存放在服务器端的类似于HashTable的数据结构,用来存放用户数据,当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。一般情况下,服务器会在一定时间内(默认20分钟)保存这个HashTable,过了时间限制,就会销毁这个HashTable。在销毁之前,程序员可以 将用户的一些数据以键值对的形式暂时存放在这个HashTable中。

    我们通常用以下两种方式来保存 Session ID:

    [1] 使用Cookie来保存,这是最常见的方法。服务器通过设置Cookie的方式将Session ID发送到浏览器。

    [2] 使用URL附加信息的方式(当cookie被禁止时可以采取这种方式)

    下面我们来分析一下保存用户登录状态的Session实现方法,用户首次访问网站时需要在登录页面进行登录,登录后跳转到网站首页,关闭浏览器后再次访问网站,不需要进行登录,可直接访问首页。首先分析一下逻辑,首次访问网站时,请求首部是没有Cookie字段的,服务器找不到Session ID,要通知浏览器跳转到登录页面,同时生成HashTable和Session ID,在响应首部里的Set-Cookie字段加入Session ID返回给客户端。用户再次访问该网站时请求首部里有了Cookie字段,包含Session ID,服务器端提取出Session ID,查找到对应的HashTable,即找到Session ID则判断为已登录状态。前面我们说到,HashTable的默认保存时间为20分钟,也就是说,过了20分钟我们就无法保存登录状态了。现在通用的解决办法是,将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端,当服务器上的Session销毁以后,使用Cookie里面存放的用户名和加密之后的密码重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID。需要注意的是,虽然在前端也能通过cookie来判断登录状态,但任何前端的验证都是不可靠的,判断状态还是要通过后端来实现。

    参考:https://segmentfault.com/a/1190000004556040

               https://www.cnblogs.com/xlh-2014/p/8110685.html

  • 相关阅读:
    jquery easy ui 学习 (8)basic treegrid
    jquery easy ui 学习 (7) TreeGrid Actions
    jquery easy ui 学习 (6) basic validatebox
    jquery easy ui 学习 (5) windowlayout
    jquery easy ui 学习 (4) window 打开之后 限制操纵后面元素属性
    提示“应用程序无法启动,因为应用程序的并行配置不正确”不能加载 System.Data.SQLite.dll
    visual studio 添加虚线的快捷键
    VS2010打开项目时,出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
    visual studio 编译时 出现 Files 的值 乱码
    微信 连接被意外关闭
  • 原文地址:https://www.cnblogs.com/zdd2017/p/9762665.html
Copyright © 2011-2022 走看看