• cookie/session详解


    一、什么是cookie

      在日常生活中,我们浏览一个网页,登陆自己的账号,然后关掉网页吃个饭,回来以后再次打开网页,发现我们的账号还处于登陆状态,有人可能会发出疑问,这是怎么实现的?我明明没有输入账号密码啊!

      这就是cookie的用途之一,为了使我们上网更加方便,cookie避免了很多不必要的二次操作,cookie本质是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互,每次访问某个网页的时候,浏览器都会将相应站点下的cookie内容取出,放在http的请求头中,服务器接收后会按照相应的cookie内容做出实际的响应。cookie 是有大小限制的,大多数浏览器支持最大为 4096 字节的 Cookie,它是以文件形式存放在客户端计算机中,所以查看和修改 cookie 都是很方便的,这就是为什么常说 cookie 不能存放重要信息的原因。

      每个 cookie 的格式都key-value型的:即cookieName = Vaue;名称和值都必须是合法的标示符。cookie如果被制定了有效期,它就会保存在用户的本地磁盘上,如果没有,再关闭浏览器的时候cookie就会失效。

    二、什么是session

      通过上文对cookie的介绍,我们大致明白了这个为我们上网提供便利服务的cookie是什么东西,但是有细心的小伙伴一定会发现一个问题!!!这个cookie不安全啊,这尼玛保存在用户本地,万一被人盗取了不傻了??不是什么信息都泄露了??

      对,这就是问题所在,如果将所有信息不经过加密保存在本地,任何一个有机会接近这台电脑的人都可以盗走其中的cookie信息并使用,聪明的程序员为了避免这种事情发生,发明了两样东西——secure cookie和session。secure cookie顾名思义,就是经过加密的cookie,但不是本文讨论的重点,本文重点讨论的是另一种方式,session。

      http是一种无状态协议,这使其更加轻便,但也产生了一个问题,用户的状态无法保存下来,比如我们常用的购物车,服务器怎么记录我们往车里添加过什么物品呢,它又是如何判断添加到哪里呢?session就是一个实现这种情景的方法,它可以记录每一个用户的状态等信息。但不同于cookie的是,session保存在服务器端,cookie保存在客户主机。

      服务器通过一个叫sessionID的字段来区分每一个用户,一般它会保存在cookie中,根据不同的sessionID,服务器会做出不同的响应。

      如果cookie被禁用了的话,session还可以通过url来传递sessionID。

      Session通过一个称为PHPSESSID的Cookie和服务器联系。Session是通过sessionID判断客户端用户的,即Session文件的文件名。sessionID实际上是在客户端和服务端之间通过HTTP Request 和 HTTP Response传来传去。sessionID按照一定的算法生成,必须包含在 HTTP Request 里面,保证唯一性和随机性,以确保Session的安全。如果没有设置 Session 的生成周期, sessionID存储在内存中,关闭浏览器后该ID自动注销;重新请求该页面,会重新注册一个sessionID。如果客户端没有禁用Cookie,Cookie在启动Session回话的时候扮演的是存储sessionID 和 Session 生存期的角色。Session过期后,PHP会对其进行回收。

    三、session和cookie的区别:

    1,session 在服务器端,cookie 在客户端(浏览器)

    2,session 存在在服务器的一个文件里(默认),不是内存

    3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果 浏览器禁用了 cookie ,同时 session 也会失效(当然也可以在 url 中传递)

    4,session 可以放在 文件,数据库,或内存中都可以。

    5,用户验证这种场合一般会用 session

    所以,总结一下:

    Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

    Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

    Cookie与Session问答

      以下内容转载自https://www.cnblogs.com/huchong/p/8481779.html

    1. Cookie运行在客户端,Session运行在服务端,对吗?

      A:不完全正确。Cookie是运行在客户端,有客户端进行管理;Session虽然是运行在服务器端,但是sessionID作为一个Cookie是存储在客户端的。

    2. 浏览器禁止Cookie,Cookie就不能用了,但Session不会受浏览器影响,对吗?

      A:错。浏览器禁止Cookie,Cookie确实不能用了,Session会受浏览器端的影响。很简单的实验,在登录一个网站后,清空浏览器的Cookie和隐私数据,单机后台的连接,就会因为丢失Cookie而退出。当然,有办法通过URL传递Session。

    3. 浏览器关闭后,Cookie和Session都消失了,对吗?

      A:错。存储在内存中额Cookie确实会随着浏览器的关闭而消失,但存储在硬盘上的不会。更顽固的是Flash Cookie,不过现在很多系统优化软件和新版浏览器都已经支持删除Flash Cookie。百度采用了这样的技术记忆用户:Session在浏览器关闭后也不会消失,除非正常退出,代码中使用了显示的unset删除Session。否则Session可能被回收,也有可能永远残留在系统中。

    4. Session 比 Cookie 更安全吗? 不应该大量使用Cookie吗?

      A:错误。Cookie确实可能存在一些不安全因素,但和JavaScript一样,即使突破前端验证,还有后端保障安全。一切都还要看设计,尤其是涉及提权的时候,特别需要注意。通常情况下,Cookie和Session是绑定的,获得Cookie就相当于获得了Session,客户端把劫持的Cookie原封不动地传给服务器,服务器收到后,原封不动地验证Session,若Session存在,就实现了Cookie和Session的绑定过程。因此,不存在Session比Cookie更安全这种说法。如果说不安全,也是由于代码不安全,错误地把用作身份验证的Cookie作为权限验证来使用。

    5. Session是创建在服务器上的,应该少用Session而多用Cookie,对吗?

      A:错。Cookie可以提高用户体验,但会加大网络之间的数据传输量,应尽量在Cookie中仅保存必要的数据。

    6. 如果把别人机器上的Cookie文件复制到我的电脑上(假设使用相同的浏览器),是不是能够登录别人的帐号呢?如何防范?

      A:是的。这属于Cookie劫持的一种做法。要避免这种情况,需要在Cookie中针对IP、UA等加上特殊的校验信息,然后和服务器端进行比对。

    7. 在IE浏览器下登录某网站,换成Firefox浏览器是否仍然是未登录状态?使用IE登录了腾讯网站后,为什么使用Firefox能保持登录状态?

      A:不同浏览器使用不同的Cookie管理机制,无法实现公用Cookie。如果使用IE登录腾讯网站,使用Firefox也能登录,这是由于在安装腾讯QQ软件时,你的电脑上同时安装了针对这两个浏览器的插件,可以识别本地已登录QQ号码进而自动登录。本质上,不属于共用Cookie的范畴。

      

      

      

  • 相关阅读:
    Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
    在阳台上种花生
    已知传递函数,求幅频响应?
    win8快速锁屏
    word2016怎么让目录索引显示在左边?
    Matlab 瑞利信道仿真
    rayleighchan实现瑞利多径衰落信
    2017电商趋势
    【连载7】二手电商平台的账号与信用体系
    【连载6】二手电商APP的导购功能与关系链机制分析
  • 原文地址:https://www.cnblogs.com/zllovellyo/p/12600515.html
Copyright © 2020-2023  润新知