Cookie与Session傻傻分不清楚

2023-06-18
19547 分钟
...

一、Cookie与Session的区别

Cookie和Session都是用于在Web应用程序中跟踪用户的状态的机制。 Cookie和Session都是用于跟踪用户状态的机制 虽然Cookie和Session都可以用于存储用户的数据,可用于跟踪用户身份和行为 , 但它们的工作方式/实现方式有所不同,具有不同的优缺点。

1.1.1 Cookie是什么?

Cookie是一种存储在用户计算机上的小文件,用于跟踪用户的身份和行为。 Cookie是一种在客户端存储数据的机制。

  1. Cookie(HTTP Cookie):Cookie是一小段文本信息,由服务器发送到浏览器并存储在用户计算机上的文件中。它通常用于跟踪用户会话、存储用户首选项和记录其他与用户相关的信息。当浏览器向服务器发送请求时,会自动将相应的Cookie信息包含在请求中,以便服务器可以识别用户并提供个性化的服务。Cookie可以设置过期时间,可以是会话级的(存储在内存中,关闭浏览器后会自动删除),也可以是持久性的(在指定的过期时间之前保留在用户计算机上)。
  2. Session(会话):Session是在服务器端存储用户会话信息的机制。当用户访问网站时,服务器会为每个用户创建一个唯一的会话ID,并将会话ID与用户相关的信息存储在服务器的内存或数据库中。然后,服务器将会话ID返回给浏览器,通常通过Cookie的方式。浏览器将会话ID存储在Cookie中,并在后续的请求中将其发送给服务器,以便服务器可以识别用户的会话并提供相应的服务。会话可以用于跟踪用户状态、存储临时数据和实现安全性控制等。
  3. Token(令牌):Token是一种用于进行身份验证和授权的令牌。在身份验证过程中,用户提供凭据(如用户名和密码),服务器验证凭据的有效性,并在验证通过后颁发一个Token给客户端。该Token通常是一个加密的字符串,包含有关用户身份和权限的信息。客户端在后续的请求中将Token发送给服务器,以证明其身份和权限。服务器通过验证Token的有效性来确定用户是否被授权访问请求的资源。Token可以存储在Cookie中,也可以作为请求的头信息或请求参数进行传递。

总结:Cookie是在浏览器端存储用户信息的一种机制,Session是在服务器端存储用户会话信息的机制,而Token是一种用于进行身份验证和授权的令牌。它们在Web应用程序中扮演着不同的角色,用于实现用户身份管理、会话跟踪和安全控制等功能。

1.1.2 Cookie实现原理

Cookie是在用户访问网站时由服务器发送到用户浏览器中的数据,浏览器将其存储并随后将其发送回服务器以供识别用户。

当Web服务器向客户端发送响应时,可以在响应头中包含一个Set-Cookie头,该头指示客户端存储一个名为cookie的键值对。客户端将在以后的请求中包含该cookie,以便Web服务器可以识别客户端并提供个性化的响应。

1.1.3 设置cookie的示例代码块

以下是一个设置cookie的示例代码块:

1.2 Session

1.2.1 Session是什么?

Session是一种服务器端的技术,用于跟踪用户在网站中的活动。 Session是一种在服务器端存储数据的机制。

1.2.2 Session实现原理

当客户端向Web服务器发送请求时,Web服务器可以创建一个会话并为该会话分配一个唯一的ID。 Web服务器可以将该ID存储在cookie中,以便客户端可以在以后的请求中将其发送回来。 Web服务器可以使用该ID来查找与该会话相关联的数据。

Session将用户数据存储在服务器上,并为每个用户分配一个唯一的标识符,称为Session ID。每次用户访问网站时,服务器会使用该ID来检索用户数据,而不是依赖于Cookie。

1.2.3 使用session的示例代码块

以下是一个使用session的示例代码块:

1.3 区别

1.3.1 存储数据的位置

Cookie存储在客户端,而Session存储在服务器端。

1.3.2 安全性

Cookie可能存在安全问题,因为它们可以在用户计算机上被篡改或删除。 Session比Cookie更安全,因为客户端无法修改Session数据,即用户无法轻易篡改Session数据。

1.3.3 存储的数据量

Session可以存储比Cookie更多的数据,因为Cookie的大小有限制。

1.3.4 有效期

Cookie可以在客户端保留很长时间,而Session通常在客户端关闭时自动过期。

1.3.5 存储的数据内容

Session可以用于存储敏感数据,因为它们不会在客户端上保留很长时间。

二、JS操作Cookie的值

<html>
  <head>
    <script type="text/javascript">
      function getCookie(c_name){
        if (document.cookie.length>0){
          c_start=document.cookie.indexOf(c_name + "=")
          if (c_start!=-1){
            c_start=c_start + c_name.length+1
            c_end=document.cookie.indexOf(";",c_start)
            if (c_end==-1)
              c_end=document.cookie.length
            return unescape(document.cookie.substring(c_start,c_end))
          }
        }
        return ""
      }

      function setCookie(c_name,value,expiredays){
        var exdate=new Date()
        exdate.setDate(exdate.getDate()+expiredays)
        document.cookie=c_name+ "=" +escape(value)+
          ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
      }

      function checkCookie(){
        username=getCookie('username')
        if (username!=null && username!=""){
          alert('Welcome again '+username+'!')
        }else{
          username=prompt('Please enter your name:',"")
          if (username!=null && username!="")   {
            setCookie('username',username,365)
          }
        }
      }
    </script>
  </head>
  <body onLoad="checkCookie()">
  </body>
</html>

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
html2024-07-24
前端面试题汇总之HTML篇(含答案)
1、什么是 DOCTYPE(⽂档类型),有何作用 (1) 解释(是什么) DOCTYPE是是HTML5的文档声明,一种标准 的 。 (2)DOCTYPE的作用包括: 1. 告知浏览器使用哪个HTML版本 :定义和声明HTML文档的类型和版本, 告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义来解析文档 ,例如, 声明表示文档是基于HTML5的。不同的HTML版本可能具有不同的语法和功能支持,因此DOCTYPE有助于...
学习面试
html2022-12-02
H5新特性有哪些?
H5拥有6种新特性 1. 语义化标签,例如header,footer,section,article等 语义化标签的作用:提升页面的阅读性(结构性增强),更有利于SEO,对于使用屏幕阅读器的人来说会更友好(有明显的语气差别,例如strong标签内的内容会重读); 2. 新增媒体元素,audio、video audio和video标签能够很容易的输出音频或视频流,提供便利的获取文件信息的API 更多详细属性参考 3.用于绘画的canvas...
面试
html2022-12-01
什么是响应式设计?响应式设计的基本原理是什么?如何做?
简介 我这么理解:响应式布局就是一个网站能够兼容多个设备,可以根据屏幕的大小自动调整页面的展示方式以及布局,我们不用为每一个设备做一个特定的版本。响应式网站的特点: 同时适配PC+平板+手机等 网站的布局会根据视口来调整模块的大小和高度 响应式设计的基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理来设置差异化的css样式 一、是什么? 响应式网站设计(Responsive Web Design)是一种网络页面设计布局,页面的设计与开发...
面试面试官
html2022-11-23
前端性能优化 - 用RAIL模型分析性能
RAIL是一个以用户为中心的性能模型,它把用户的体验拆分成几个关键点(例如,tap,scroll,load),并且帮你定义好了每一个的性能指标。 有以下四个方面: Response Animation Idle Load <img width="676" height="245" src="../../ resources/1734894ee7aaf2b6 tplv t2oaga2asx 2e5a8010c5bb40479.webp"/...
面试
html2022-11-23
网站图片加载慢怎么优化
一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载? <a id="t1" </a <a id="1 Sprites 2" </a 1、使用 Sprites 图片技术 它将一个页面涉及到的所有零星图片都包含到一张大图中去,然后利用 CSS 技术展现出来。这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了,可以减少了整个网页的图片大小,并且利用 能很好地减少网页的 请求,从而大大的提高页面的性能。...
面试
html2022-11-23
输入URL到显示页面的全过程
从浏览器地址栏输入 url 到显示页面的步骤 <a id="t1" </a <a id=" 2" </a 基础版本 : 1. 浏览器根据请求的 交给 域名解析 ,找到真实 ,向服务器 发起请求 ; 2. 服务器交给后台处理完成后 返回数据 ,浏览器 接收⽂件 ( 、 、 、图象等); 3. 浏览器对加载到的资源( 、 、 等)进⾏语法解析,建立相应的内部数据结构 (如 的 ); 4. 载⼊解析 到的资源⽂件, 渲染页面 ,完成。 <a...
面试

评论

请登录后发表评论

去登录
加载评论中...

目录