页面传值方式

1、QueryString url传值?key=value
适应场景:页面跟页面自己传值.页面之间传值
缺点:稍徽不安全(地址栏可以看到内容).长度限制

2、Post:Request["key"]
适用场景:页面跟页面自己传值,页面之间传值。
缺点:稍微安全(用HttpWatch监控http请求也可以看到内容).没有长度限制

3、Cookie:存储在客户端的一小段文本.会随着每次请求发送到后合.跟网站相关联.跟域有关
如果没设置过期时间,默认保存着浏览器内存中,浏览器己关闭Cookie就消失
如果设置了过期时间,则保存在电脑硬盘中,知道过期时间小于当前时间,cookie才消失

.Cookie原理:
A.第一次get请求无cookie
B.服务器通过响应报文头里的set-cookie向浏览器设置cookie信息
C.浏览器通过请求报文头里的cookie传递到浏览器存储的cookie信息


缺点:不能保存过多信息,不能保存机密数据.大多数浏览器支持最大为4096(4kb)字节的cookie,
只允许每个站点存储20个Cookie,所有站点的Cookie总数通常为300个
Cookie的域:
浏览器往后台发送数据时候,要把cookie放到请求报文里面去.发送到后台。
请求是子域的网页.那么主域的cookie会不会发送到后台呢?
答案:是的。一块发送。如果请求时主域页面.子域的Cookie是不会发送到后台的。
如果子域想让请求主城页面的时候也一块发送到后台.设置当前Cookie的域为主域可以了。
适用场景:让浏览器帮助我们记忆用户的数据或最近浏览商品.

4、Session:存储在后台服务器瑞的数据,跟具体的一个浏览器关联。
sesslon:服务端
原理:第一次请求来的时候.后台生成一个
SessionID放到客户端Cookie里面去。后续的所有的请求来了之后都会先拿到SessionId然后跟当前Session对象关联一块。
适用场景:保存用户的会话信息,如用户登录,验证码
Session跟用户登录没关系。

5、ViewState:本质是隐藏域。数据是通过Base64加密到隐藏域里面去。
适用的场景:页面跟页面自己传值。
ViewState机制:以name为key,以value为值提交到服务器,服务器在接收到用户请求一个页面后,
会自动在请求报文中找看是否包含_Viewstate的隐藏域,如果有,则将中间的值解码后添加到
页面的Viewstate属性中;服务器在输出的时候,也会自动的将viewstate中的值添加到表单里
名叫_viewstate的隐藏域中。
扩展内容.AspNet原理用到地方:
第一:文本框,下来列表等服务器端控件的改变事件是通过Viewstate来实现。
第二:Ispostback也是用到了Viewstate了。
第三:因为复杂控件也是通过Viewstate来记录数据的:比如:ListView表格。
缺点:Viewstate在页面和后台服务器之间来回传递。大量带宽的消耗,优化就是禁用Viewstate,页面禁用.或者控件直接禁用。

6.Application:全局的,存储在服务器端的数据。
除非应用程序关闭(程序关闭再打开或程序重新生成).否则对象一直存储在内存中。
Application:帮助我们记录全局的数据。其实本质就是全局变量
存储全局的信息,网站在线人数统计
尽量少用:因为服务器端的内存是相当宝贵的。所以尽量少的去占用全局的内存

7、数据库

8、缓存

9、静态变量全局变量

10、文件


谈谈ViewState。
Http是无状态的,WebForm为了实现基于http的“有状态”从而简化开发,ViewState用来在两次请求间保持状态。页面返回前将界面的状态序列化到ViewState中,这样就将状态保存在了浏览器中,下次页面提交的时候会顺便再将ViewState提交到服务器,这样服务器就根据ViewState还原了状态,这样WebForm开发就像有状态一样了。


Session有什么重大BUG,微软提出了什么方法解决?
iis中由于有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会造成Session丢失。
可以用State Server或SQL Server数据库的方式存储Session,不过这种方式比较慢,而且无法捕获Session的END事件,但是我认为这不是bug,只能说是进程内方式存储Session的缺陷,缺陷和bug不一样,进程内方式存储Session会由服务器来决定什么时候释放Session,进程内方式不满足要求的话完全可以用StateServer和数据库的方式
StateServer还可以解决集群Session共享的问题

Session、Cookie、Application什么时候清除?
Cookie客户端:
如果没设置过期时间,默认保存着浏览器内存中,浏览器己关闭Cookie就消失
如果设置了过期时间,则保存在电脑硬盘中,知道过期时间小于当前时间,cookie才消失

Session:服务器端
当会话过期或终止,服务器就会清除Session对象,默认时间20分钟
如果想关闭浏览器清除Session对象,则可调用Session.Clear()方法
InProc模式,此模式将会话状态存储在Web服务器上的内存中。这是默认设置。当服务器进程被停止或者重启的时候.内存里的,Session也会被清空
StateServer,此模式将会话状态存储在一个名为ASP.NET状态服务的单独进程中
SQLServer将会话状态存储到一个SQL Server数据库中
Custom模式,此模式允许您指定自定义存储提供程序。
Off模式.此模式禁用会话状态

Application:服务器端
除非应用程序关闭(程序关闭再打开或程序里新生成),否则对象一直存储在内存中。

 

posted on 2017-11-07 17:21  D-Z-K  阅读(182)  评论(0编辑  收藏  举报

导航