热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

老生常谈Session和Cookie之间区别与联系(必看篇)

下面小编就为大家分享一篇老生常谈Session和Cookie之间区别与联系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一. 概念理解

你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接。这是因为

你浏览某个网页的时候,WEB 服务器会先送一些资料放在你的计算机上,类似于你打的文字,选的一些东西什么的,COOKIE 会帮你都纪录下来。当下次你再光临同一个网站,WEB

服务器会先看看有没有它上次留下的 COOKIE 资料,有的话,就会依据 COOKIE里的内容来判断使用者,送出特定的网页内容给你。 COOKIE 的使用很普遍,许多有提供个人化服务的

网站,都是利用 COOKIE来辨认使用者,以方便送出使用者量身定做的内容。

然而,COOKIE是什么呢?session又是什么?

先来了解几个概念。

1、无状态的HTTP协议:

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器

传送到客户端的浏览器。

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

2、会话(Session)跟踪:

会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术

是COOKIE与Session。COOKIE通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

二. COOKIE

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的

会话还是用户B的会话了。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是COOKIE

的工作原理。

COOKIE实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个COOKIE。客户端会把COOKIE保存起来。

当浏览器再请求该网站时,浏览器把请求的网址连同该COOKIE一同提交给服务器。服务器检查该COOKIE,以此来辨认用户状态。服务器还可以根据需要修改COOKIE的内容。

1、COOKIE的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成COOKIE的作用范围。

1)Name 和 Value 属性由程序设定,默认值都是空引用。

2)Domain属性的默认值为当前URL的域名部分,不管发出这个COOKIE的页面在哪个目录下的。

3)Path属性的默认值是根目录,即 ”/” ,不管发出这个COOKIE的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此COOKIE的作用范围。

4)Expires 属性,这个属性设置此COOKIE 的过期日期和时间。

HttpCOOKIE COOKIE = new HttpCOOKIE("MyCook");//初使化并设置COOKIE的名称
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//过期时间为1分钟
COOKIE.Expires = dt.Add(ts);//设置过期时间
COOKIE.Values.Add("userid", "value");
COOKIE.Values.Add("userid2", "value2");
Response.AppendCOOKIE(COOKIE);

2、Path和Domain属性

--path:  

如果http://www.china.com/test/index.html 建立了一个COOKIE,那么在http://www.china.com/test/目录里的所有页面,以及该目录下面任何子目录里

的页面都可以访问这个COOKIE。这就是说,在http://www.china.com/test/test2/test3 里的任何页面都可以访问http://www.china.com/test/index.html

建立的COOKIE。但是,如果http://www.china.com/test/ 需要访问http://www.china.com/test/index.html设置的cookes,该怎么办?

这时,我们要把COOKIEs的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享COOKIEs。

--Domain:

比如: http://www.baidu.com/xxx/login.aspx 页面中发出一个COOKIE,Domain属性缺省就是www.baidu.com ,可以由程序设置此属性为需要的值。  

值是域名,比如www.china.com。这是对path路径属性的一个延伸。如果我们想让 www.china.com能够访问bbs.china.com设置的COOKIEs,该怎么办? 我们可以把

domain属性设置成“china.com”, 并把path属性设置成“/”。

3、会话COOKIE和持久COOKIE

若不设置过期时间,则表示这个COOKIE的生命期为浏览器会话期间,关闭浏览器窗口,COOKIE就消失。这种生命期为浏览器会话期的COOKIE被称为会话COOKIE。会话COOKIE一般不存储在

硬盘上而是保存在内存里,当然这种行为并不是规范规定的。

若设置了过期时间,浏览器就会把COOKIE保存到硬盘上,关闭后再次打开浏览器,这些COOKIE仍然有效直到超过设定的过期时间。存储在硬盘上的COOKIE可以在浏览器的不同进程间共享。

这种称为持久COOKIE。

4、COOKIE具有不可跨域名性

就是说,浏览器访问百度不会带上谷歌的COOKIE。

三. Session

Session是另一种记录客户状态的机制,不同的是COOKIE保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录

在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

1、两个问题:

1)什么东西可以让你每次请求都把SessionId自动带到服务器呢?显然就是COOKIE了,如果你想为用户建立一次会话,可以在用户授权成功时给他一个唯一的COOKIE。当一个

用户提交了表单时,浏览器会将用户的SessionId自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionId

所对应的用户。试想,如果没有 SessionId,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。

2)储存需要的信息。服务器通过SessionId作为key,读写到对应的value,这就达到了保持会话信息的目的。

2、session的创建:

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务

器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关

联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。

3、禁用COOKIE:

如果客户端禁用了COOKIE,通常有两种方法实现session而不依赖COOKIE。

1)URL重写,就是把sessionId直接附加在URL路径的后面。

2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:

 
 
 
 

4、Session共享:

对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分别储存

在各自的COOKIE中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改COOKIEs的域名为父域名达到COOKIE共享的目的,从而实现SessionId的共

享。带来的弊端就是,子站间的COOKIE信息也同时被共享了。

四. 总结

1、COOKIE数据存放在客户的浏览器上,session数据放在服务器上。

2、COOKIE不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个COOKIE保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个COOKIE。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在COOKIE中。

以上这篇老生常谈Session和COOKIE之间区别与联系(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
author-avatar
手机用户2702932960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有