【缓存--题外篇】session 、cookie是什么(一)

前言

    项目中经常会用到缓存,但是对于缓存还是存在一个模糊的认识,所以就对缓存进行一次整体性的学习,结果深入去发现的时候发现到处都在用缓存,无论从浏览器、数据库、架构实现、CPU缓存等以及专门用来实现缓存的工具层出不穷,身为小白还是以虚心学习的态度去拨开层层迷雾,重新认识缓存到底是什么。
    在学习缓存之前我想先解决几个不相关的概念,总是不能搞清楚。就是对于session、cookie、token有一个清晰的认识。他们到底是什么呢?缓存的学习就从这里开始吧。

cookie和session的产生

    session是一次浏览器和服务器的交互的会话,就是我给你打招呼,你给我一个回应,就完成了一次会话。为什么会出现session会话?


    在使用浏览器打开网页的时候使用HTTP协议,它是无状态的,即便是相邻的两个请求都是没有关系的,互相不认识,没有关联。这种无状态可以实现快速反应。但是这个时候就有一个问题了,我希望我在登录一个网站之后它们是有关联的。例如我登录了淘宝 https://www.taobao.com/ ,我在打开一个商品链接 https://qiang.taobao.com/?spm=a21bo.2017.2003.5.5af911d9nzGXbC&itemId=556720586899 之后也希望是登陆的状态,但是这是两个不同的页面,相当于两个无状态的HTTP请求,它们是无关联的。我不可能再重新登录一次淘宝,或者后台去查数据库是否已经有登录状态,如果登录了那就判断是登录了。这种查询数据库的方案可以实现,但是像淘宝这种网站是不可能使用的,对数据库造成的压力是不可想象的,不到一秒服务器估计就不行了。


    正是由于这种需求,一个新的客户端存储数据方式出现了:cookie。cooKie是把少量的信息存储在用户自己的电脑上,在一个域名下的事一个全局的,只要设置他的存储路径在域名www.rxs.com下,当用户访问浏览器是,php就可以从这个域名的任意页面读取cookie中的信息。所以就解决了我再 www.rxs.com/login.php 页面登录,我也可以在 www.rxs.com/index.php 获取到这个登录信息了。


    cookie虽然解决了问题,但是cookie本身是存放在客户端的,浏览器会对cookie的大小进行限制,最重要的是它是不安全的,它是可见的,用户可以随意修改,基于这种需求,一种新的存储会话机制:session诞生了。session是存放在服务器端的,当每个用户访问服务器是首先会建立一个session,同时会分配一个唯一的sessionID给用户,之后的请求都会检测sessionID来检测用户是否已经存在。

cookie

    cookie就类似与通行证,每个人在访问页面的时候都携带自己的通行证,这样就能确认客户的信息了。cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就是用response想客户端浏览器颁发一个cookie,客户端会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网站连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态,服务器还可以根据需要修改cookie的内容。
1、cookie主要包括:名字、值、过期时间、路经和域。

  • Name和Value属性由程序设定,默认值都是空引用。
  • Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下。
  • Path属性的默认值是根目录,即“/”,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
  • Expires属性,这个属性设置此cookie的过期日期和时间。
  • 路径与域一起构成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.rxs.com/test/index.html建立了一个cookie,那么http://www.rxs.com/test/目录里的所有页面,以及该目录下任何子目录里的页面都可以访问这个cookie。但是http://www.txs.com/test/需要访问http://www.rxs.com/test/index.html设置的cookie该怎么办?
    这时将cookie的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有Web页面都可以共享cookie。

  • Domain
    比如:http://www.rxs.com/xxx/login.aspx 页面中发出一个cookie,Domain属性缺省就是 www.rxs.com,可以由程序设置此属性为需要的值。
    值是域名,比如 www.rxs.com 这是对path路径属性的一个延伸。如果我们想让 www.rxs.com 能够访问 bbs.rxs.com 设置的cookie,该怎么办?
    我们可以把domain属性设置成“rxs.com”,并把path属性设置成“/”。

    3、会话cookie和持久cookie

  • 会话cookie
    当不设置过期时间时,则表示这个cookie的生命周期为浏览器会话结束,关闭浏览器的时候,cookie就消失。这是的cookie一般不存储在硬盘上,而是存储在内存里,这种行为并不是规范规定的。

  • 持久cookie
    如果设置了过期时间,浏览器会把cookie保存在硬盘上,关闭浏览器之后再次打开cookie仍然有效,直到cookie过期时间。

    4、cookie具有不可跨域名性

  • 浏览器访问一个域名是不会带上其他域名的cookie。

5、大小及数量限制
  • 单个cookie的大小是有限制的,一般是*K。不同的浏览器所含cookie的最大个数不同。
        

本次就学习到这里,下一篇继续~~

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值