ASP.NET 中 Web MVC项目 学习记录

1. viewData , viewBag , TempData , session之间的区别和特点?

viewdata:
ViewData是一个继承自ViewDataDictionary类的Dictionary对象
ViewData用来:从Controller向对应的View传递值
ViewData的只在当前当前的请求中有效,生命周期和View相同,其值不能在多个请求中共享
在重定向(redirection)后,ViewData中存储的变量值将变为null
在取出ViewData中的变量值是,必须进行合适的类型转换(隐式或显式)和空值检查。
viewBag:
ViewBag是一个动态类型变量(dynamic),这是C# 4.0引入的新特性,变量类型会在运行时进行解析。
ViewBag基本上是ViewData的包装,也是用来:从Controller向View来传递值的。
ViewBag也只在当前的请求中有效
在重定向(redirection)后,ViewBag中存储的变量值将变为null
因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换
TempData:
TempData是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的
TempData是用来在多个Actions或从当前请求向子请求, 页面发生了重定向(Redirection)时传递共享数据
只有在目标视图(View)完全加载后才有效。
在取出TempData存储的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查
session:
Session也是ASP.NET MVC程序传递值的一种方式,但与TempData不同,[[用户的整个会话中Session都不会过期]]。
Session在同一用户会话过程中的所有请求中有效,比如,刷新页面。
Session中的值也需要进行类型转换(隐式或显式)和非空检查
Session主要用在需要在多个Controllers, Actions and Views共享数据(非敏感数据)时使用。
总结:
如果页面发生了跳转(Redirection),ViewBag和ViewData中的值将不复存在, 但是TempData中的值依然还在。 
换句话讲, ViewBag和ViewData存储的值的生命周期只有在从Controller到View中, 而TempData中的数据不仅在从Controller到View中有效,在不同的Action之间或者从一个页面跳转到另一页面(Controller to Controller)后依然有效。
TempData["Message"] = "Hello ASP.NET MVC";

Session其实和ViewData类似,也是一个String Key/Object Value字典数组。但是,Session是存储在客户端的Cookies中,所以它的生命周期是最长的。 但是,正因为其存储的客户端, 所以必须确保没有敏感机密的信息存储其中。
Session["Message"] = "Hello ASP.NET MVC";

2. cookie和session区别联系?

查看网址:https://www.cnblogs.com/endlessdream/p/4699273.html

1、无状态的HTTP协议:

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,

超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器
传送到客户端的浏览器。

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

  会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。
会话(Session)跟踪   是Web程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

Cookie有两种?
会话Cookie和持久Cookie

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

若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。
这种称为持久Cookie
Cookie具有不可跨域名性
就是说,浏览器访问百度不会带上谷歌的cookie

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

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

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/88554815