Session、Cookie与WebStorage

Session、Cookie与WebStorage

Session(保存在服务端)与Cookie(保存在客户端)简介:
网络服务器为无状态:用户发送请求给服务器,服务器开启对话接收了数据,但当用户下次再次发送数据时,服务器就会再次开辟另一个新的对话去接收数据(无记忆)
而Session与Cookie就是人们用来使服务器与客户产生状态的属性(记录对话内容,保存数据)
服务器与浏览器进行一次数据传递为:会话:表示一段时间的对话(只有浏览器未关闭或结束,则该会话就不会结束)
客户端第一次请求时服务器会建立一个Session域名并创建唯一的SessionID,并把SessionID返回给客户端
服务端在进行响应时,通常使用cookie方式储存sessionID返回给客户端
在此后当前会话中,客户端每次请求都会带着SessionID,以便服务器识别请求对象
Session、Cookie与WebStorage_第1张图片
1、 Session:
Session大小没有限制,客户端进行请求时,可以将请求的数据保存到Session(服务器)中,这样在访问其他页面时,可以获取到该客户请求的数据:例:用户登录的信息、网购购物车、防止用户非法登录
保存到服务的数据会被转换成对象

保存的格式:
Session[“ghid2”](自定义名称) = ghid; (保存的数据名)
获取的格式:
string user = Session[“ghid2”].ToString(); .ToString():可以将对象转换为字符串

清除会话,在用完Session数据时,清除会话可以防止Session被污染:
Session.Clear();

移除Session中的属性:
Session.Remove(“ghid2”) :清除指定项
Session.RemoveAt() : 通过索引清除指定项
Session.RemoveAll() : 清除所有的项

2、 Cookie:
Cookie存储的大小为4kb,Cookie保存的是字符串
Cookie用来保存中文会出现乱码,因此在保存中文字符串时先将中文进行编码后保存,获取时在解码
Session、Cookie与WebStorage_第2张图片
Session、Cookie与WebStorage_第3张图片
Cookie若不设置过期时间,则会保存在内存中,生命周期随浏览器关闭而结束,当设置了生命周期,则会保存在硬盘中,关闭浏览器依然存在
应用场景:
(1) 判断用户是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
(2) 保存上次登录的时间等信息。
(3) 保存上次查看的页面
(4) 浏览计数
Session、Cookie与WebStorage_第4张图片

保存格式(以下为保存登录信息):
Session、Cookie与WebStorage_第5张图片
cookie.Expires = DateTime.Now.AddDays(-1); //设置为过期

获取格式(获取用户登录时保存在cookie的信息并使用viewbag共享数据):

在获取Cookie数据时,会被进行编码,所以获取数据时要进行解码
获取与解码:
Session、Cookie与WebStorage_第6张图片在这里插入图片描述
回填用户信息:
在这里插入图片描述
3、安全性: cookie:针对cookie所存在的攻击:Cookie欺骗,Cookie截获;session的安全性大于cookie。
  原因如下:(1)sessionID存储在cookie中,若要攻破session首先要攻破cookie;
       (2)sessionID是要有人登录,或者启动session_start才会有,所以攻破cookie也不一定能得到sessionID;
       (3)第二次启动session_start后,前一次的sessionID就是失效了,session过期后,sessionID也随之失效。
       (4)sessionID是加密的
       (5)综上所述,攻击者必须在短时间内攻破加密的sessionID,这很难。
缺点: Cookie: (1)大小受限
         (2)用户可以操作(禁用) cookie,使功能受限
         (3)安全性较低
         (4)有些状态不可能保存在客户 端。
         (5)每次访问都要传送cookie给服务器,浪费带宽。
         (6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。
        
Session: (1)Session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
       (2)依赖于cookie(sessionID保存在cookie),如果禁用cookie,则要使用URL重写,不安全
       (3)创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。
      
4、WebStorage:
WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器。
WebStorage两个主要目标:(1)提供一种在cookie之外存储会话数据的路径。(2)提供一种存储大量可以跨会话存在的数据的机制
HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)。
1、localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
2、sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。
3、localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
4、localStorage和sessionStorage的存储数据大小一般都是:5MB
5、localStorage和sessionStorage都保存在客户端(浏览器),不与服务器进行交互通信。
WebStorage的优点:
(1)存储空间更大:cookie为4KB,而WebStorage是5MB;
(2)节省网络流量:WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样每次请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量;
(3)对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据,sessionStorage会非常方便;
(4)快速显示:有的数据存储在WebStorage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快;
(5)安全性:WebStorage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题;
写法:
.setItem(key,value); //用于添加和修改保存的数据 key不存在时为添加,key存在时为修改
.getItem(key); //获取指定key的value
.removeItem(key);//移除指定key的数据
(保存到SessionStorage和localStorage的值要转换为字符串,通过JSON.stringify():转换为字符串,获取时再通过JSON.parse() :转换为json对象)
字符串设置的方式:SessionStorage.setItem(“ghid”, “132”); (参数为自定义名称、值)
对象设置:Var obj={name:小李, age:20, sex:男}
SessionStorage.setItem(“obj”,JSON.stringify(obj));
获取方式: sessionStorage.getItem(“ghid”);
移除方式: sessionStorage.removeItem(“ghid”);

SessionStorage、LocalStorage与Cookie的相同点:
(1) 三者都是保存在浏览器端中的数据,并且保存的都是字符串类型,
SessionStorage、LocalStorage与Cookie的区别:
(1) Cookie保存的数据只有5kb,而SessionStorage、LocalStorage保存的数据为5MB
(2) Cookie和LocalStorage在所有的同源窗口中的数据都是共享的,而SessionStorage在不同页面或标签页面间无法共享SessionStorage的信息,页面及标签仅指顶级窗口,如果一个标签页包含多个iframe标签且属于同源页面,则是可以共享的。
同源的概念:(1)协议相同 (2)域名相同 (3)端口相同
例:http://www.test.com
http://www.test.com(不同源,因为协议不同)
http://my.test.com(不同源,因为域名不同)
http://www.test.com:8080(不同源,因为端口不同)
(3) Cookie:Cookie始终在同源的http的请求中携带(即使不需要),即在浏览器与服务器之间来回传递,Cookie数据还有路径(path)的概念,可以限制Cookie只属于某个路径下
SessionStorage与LocalStorage不会把数据发给服务器,仅保存在本地
(4) Cookie若没有设置日期则会一直保存在本地,Localstorage除非自己删除,不然不会消失,
SessionStorage当关闭浏览器窗口时,就会消失
浏览器本地存储与服务器端存储的区别:
(1) 浏览器储存需要的时候直接从本地存取
(2) 从服务器获取时,需要浏览器发出请求
(3) 浏览器端一般存储小数据,而服务器端可以存储大数据或小数据,服务器端存储数据安全一些,浏览器适合存储一般数据

你可能感兴趣的:(c#)