我们在实际生活中总会遇到这种事情,我们一旦登录(首次输入username和password)某个站点之后,当我们再次訪问的时候(仅仅要不关闭浏览器),无需再次登录。而当我们在这个站点浏览一段时间后,它会产生我们浏览的记录,并且有的站点还提供购物车的功能。这些简单有用的功能就是通过Cookie与Session实现的。接下来。让我们一起探讨一下它们是怎样执行的。

1、概念

Cookie

有时也用其复数形式Cookies。指某些站点为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Session

Session直接翻译成中文比較困难。一般都译成时域。在计算机专业术语中。Session是指一个终端用户与交互系统进行通信的时间间隔。通常指从注冊进入系统到注销退出系统之间所经过的时间。以及假设须要的话,可能还有一定的操作空间。

详细到Web中的Session指的就是用户在浏览某个站点时。从进入站点到关闭这个站点所经过的这段时间,也就是用户浏览这个站点所花费的时间。因此从上述的定义中我们能够看到,Session实际上是一个特定的时间概念。

须要注意的是,一个Session的概念须要包含特定的client,特定的server端以及不中断的操作时间。

A用户和Cserver建立连接时所处的Session同B用户和Cserver建立连接时所处的Session是两个不同的Session。

2、差别

1、cookie数据存放在客户的浏览器上,session数据放在server上

2、cookie不是非常安全,别人能够分析存放在本地的COOKIE并进行

3、session会在一定时间内保存在server上。当訪问增多,会比較占用你server的性能

4、单个cookie在client的限制是3K,就是说一个站点在client存放的COOKIE不能大于3K。

3执行机制

3.1、Cookie机制

在程序中,会话跟踪是非常重要的事情。

理论上,一个用户的全部请求操作都应该属于同一个会话,而还有一个用户的全部请求操作则应该属于还有一个会话。二者不能混淆。

比如,用户A在超市购买的不论什么商品都应该放在A的购物车内。不论是用户A什么时间购买的。这都是属于同一个会话的。不能放入用户B或用户C的购物车内。这不属于同一个会话。

而Web应用程序是使用HTTP协议数据传输的。HTTP协议是无状态的协议。一旦数据交换完成,client与server端的连接就会关闭,再次交换数据须要建立新的连接。

这就意味着server无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时server已经无法推断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

Cookie就是这种一种机制。它能够弥补HTTP协议无状态的不足。在Session出现之前。基本上全部的站点都採用Cookie来跟踪会话。

由于HTTP是一种无状态的协议,server单从网络连接上无从知道客户身份。怎么办呢?就给client们颁发一个通行证吧,每人一个,不管谁訪问都必须携带自己通行证。这样server就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。client请求server。假设server须要记录该用户状态,就使用response向client浏览器颁发一个Cookie。

client浏览器会把Cookie保存起来。

当浏览器再请求该站点时,浏览器把请求的网址连同该Cookie一同提交给server。server检查该Cookie。以此来辨认用户状态。server还能够依据须要改动Cookie的内容。

3.2 Session机制

除了使用Cookie,Web应用程序中还常常使用Session来记录client状态。

Session是server端使用的一种记录client状态的机制,使用上比Cookie简单一些,相应的也添加了server的存储压力。

client浏览器訪问server的时候,server把client信息以某种形式记录在server上。

这就是Session。client浏览器再次訪问时仅仅须要从该Session中查找该客户的状态就能够了。

假设说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查server上的“客户明细表”来确认客户身份。

Session相当于程序在server上建立的一份客户档案,客户来訪的时候仅仅须要查询客户档案表就能够了。

例如以下图所看到的。张三和李四分别訪问该站点,在服务端会产生两个SessionID来区分该用户,而在client将相应的SessionID存放在Cookie中。以便我们再次訪问时得到我们所需的资源。

4总结

这里。我们将cookie跟session简介了一下,至于实际应用还须要我们在做项目中慢慢体会,比如,怎样控制他们的生命周期,有效期等等。并且session和cookie是我们必须要掌握的技术。由于我们要常常使用它来进行消息的传递与验证。并且它们还应用在权限控制,单点登录等技术。不管怎么说。我们都应该重视这种简单常常使用的小技能。

前端页面——Cookie与Session有什么差别的更多相关文章

  1. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  2. Cookie和Session的介绍与认识

    Cookie: cookie是一种客户端的状态管理技术. 当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以c ...

  3. 《前端之路》之 Cookie && localStorage && Session Storage 缓存相关

    08: Cookie && localStorage && Session Storage 缓存相关 客户端.前端 存储 一. 起 因 首先解释下为什么想来写这个关于前 ...

  4. 一个Login页面全面了解session与cookie

    背景 做了四年的前端开发,对外一直说自己是web开发,那么身为一个web开发怎能不知道session与cookie以及其管理方式呢~ Login涉及技术栈:Nodejs,MongoDB,Express ...

  5. 后端设置cookie写不到前端页面

    javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("id",session.getId()); co ...

  6. webform基础介绍及页面传值(session,cookie)、跳转页面

    一,IIS 1.首先知道IIS是个什么东西:它是web服务器软件,安装在服务器上,接受客户端发来的请求,并传送给服务器端,然后响应请求并送回给客户端.类似于饭店里的服务员. 2.会安装IIS——控制面 ...

  7. localstrage、cookie、session等跨域和跨页面监听更新问题

    localstrage.cookie.session等跨域和跨页面监听更新问题

  8. 前端Cookie与Session的区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  9. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

随机推荐

  1. docker之创建MariaDB镜像的方法

    一.基于commit命令方式创建 docker的安装 ? 1 2 3 [root@test01 ~]# yum install docker [root@test01 ~]# systemctl en ...

  2. PHP中的WebService

    Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, 无论它们所使用的语言. ...

  3. ADO.NET 实体数据模型 异常-“序列化类型为 XX 的对象时检测到循环引用”

    发生异常的代码如下: 1: public JsonResult GetSaleByNo1(string id) 2: { 3: SaleMvcUI.Helper.saleDBEntities sale ...

  4. [转]mysql的full join的实现

    原文地址:https://blog.csdn.net/qq_1017097573/article/details/52638360 数据库多表查询主要有以下几种 inner join内连接查询,只有两 ...

  5. Unity2017与Visual Studio2017的兼容问题

    Unity2017中新建脚本后,用Visual Studio2017打开发现不兼容. 方法一:管理员权限运行Unity. 方法二:打开Visual Studio Installer,下载Unity相关 ...

  6. Feign从配置文件中读取url

    Feign的url和name都是可配置的,就是从配置文件中读取的属性值,然后用占位符引用就可以了: ${rpc.url} @FeignClient(name = "me", url ...

  7. Android——计算器第一次完善

    完善: 1- 处理首位为0 2- 处理首位为“.” 3- 处理前两位为“0.”,此时首位为0,但是不能处理 4- 处理小数点不能重复输入 发现bug:12.3x6 = 如下图: xml <?xm ...

  8. oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

    Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...

  9. linux c 检测网络状态

    转自:http://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network ...

  10. Window环境下搭建android NDK开发环境

    1.下载ndk和cygwin NDK 下载地址:http://developer.android.com/tools/sdk/ndk/index.html Cygwin 下载地址:http://cyg ...