asp.net 状态的传递和保存

news/2024/7/7 14:39:35 标签: 数据库

http无状态

Http 协议是无状态的,不会记得上次和网页“发生了什么”(故事《初50 次》)。

试验:private 字段++。server不记的上次给了浏览器什么。否则server的压力会太大,浏览器须要记住这些值,下次再提交server的时候(请在我的宽度基础上添加10,)就要把上次的值提交给server,让他想起来。假设要知道上一次的状态,一个方法是在对浏览器响应结束之前将状态信息保存到页面表单中(实现一下),下次页面再向server发出请求的时候带上这些状态信息,这样server就能依据这些状态信息还原上次的状态了,类似于去看病的病历本。

1尽量不要这么干,client的事情让client去做。

2状态信息保存在隐藏字段中的缺点:加大站点的流量、减少訪问速度、机密数据放到表单中会有数据欺骗等安全性问题。故事:自行打印存折,由于剩余金额不是写到存折这个隐藏字段中的,唯一的关联就是卡号。

要把机密数据放到server。而且差别不同的訪问者的私密区域,那么就要一个唯一的标识。

通过Url传递

两个页面之间传递数据最好、兴许麻烦最少、最简单的方法就是通过Url传递。

长处:简单,直接。明白知道发给谁,数据不会乱。

缺点:假设多个页面或者不确定页面之间要传那么就须要每次跳转都带着。 多个页面或者不确定页面之间要传那么就须要每次跳转都带着;不保密。

Cookie

假设想自由的传递和读取,用Cookie

Cookie是和网站相关的,而且每次向server请求的时候除了发送表单參数外,还会将和网站相关的全部Cookie都提交给server,是强制性的。

Cookie也是保存在浏览器端的,并且浏览器会在每次请求的时候都会把和这个网站的相关的Cookie提交到server,并且将服务端返回的Cookie更新回数据库因此能够将信息保存在Cookie中,然后在server端读取、改动。

server返回数据除了普通的html数据以外,还会返回改动的Cookie,浏览器把拿到的Cookie值更新本地浏Cookie 览器的Cookie就能够。看报文在server端控制Cookie案例,实现记住username的功能

• 设置值的页面:Response.SetCookie(new HttpCookie("UserName",username));

• 读取值的页面:username= Request.Cookies["UserName"].Value;假设不设定Expires那么生命周期则是关闭浏览器则终止,否则“最多”到Expires时候终止。

Cookie的缺点:

还不能存储过多信息,机密信息不能存。

Cookie无法跨不同的浏览器。

Cookie:是能够被清除。不能把不能丢的数据存到Cookie中;Cookie尺寸有限制,一般就是几K,几百K

Session原理

须要一种“server端的Cookie”:

1、医生须要一个私人账本,记录病人编号和身份的相应关系;

2、为了防止病人依据分配给

他的编号推測前后人的编号,那么须要一种“非常难推測”Cookie不能存储机密数据。

假设想储存据,能够保存一个GuidCookie中,然后在server中建立一个以GuidKey,复杂数据为Value全局Dictionary。放到Application中。这 为Value全局Dictionary。放到Application中。这个Guid就是相当于用户的一个“令牌”

ASP.Net已经内置了Session机制。把上面的样例用ASP.NetSession重写。普通的HttpHandler要可以操作Session,要实现IRequiresSessionState接口。Cookie是存在client。Session是存在server端,目的是一样的:保存和当前client相关的数据(当前站点的不论什么一个页面都能取到SessionCookie)。 Session(会话)有自己主动销毁机制,假设一段时间内浏览器没有和server发生不论什么的交互,则Session会定时销毁。这也就是为什么一段时间不操作,系统就会自己主动退出。

Session实现登陆。

Application*

Application是应用全局对象。被全体共享。操作之前先Lock,操

作完毕后UnLock

加入一个“全局应用程序类” Global.asax,当应用程序第一个

页面被訪问的时候Application_Start运行。

举被非常多书举烂了的样例“统计訪问人数”,每次server上一个 举被非常多书举烂了的样例“统计訪问人数”,每次server上一个

内容被訪问的时候Application_BeginRequest会运行就把数量++

。这样为什么不好?大并发訪问会很卡!

做站点开发尽量不要用Application,也非常少有须要用它的时候。

总结

几种数据传递的差别和不同用途

• Application:全局数据,不要用

• Url:精准传递,用起来麻烦

• 隐藏字段:不保密

• Cookie:保存在client,不保密

• Session:保存在server端,不能放大数据


http://www.niftyadmin.cn/n/1175081.html

相关文章

Java基础之8个基本类型及基本类型间转换

8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数、浮点数、字符数据和布尔类型数据。需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型。基本数据类型如图 – 1所示: 图- 1 从图- 1中…

fastjson缺陷--map转换json时出现$ref的情况

DisableCircularReferenceDetect来禁止循环引用检测: JSON.toJSONString(..., SerializerFeature.DisableCircularReferenceDetect)转载于:https://www.cnblogs.com/yw-ah/p/7238883.html

python学习之路之案例1(修改haproxy的配置文件,并实现下线、上线的功能)

整个案例运用的知识点:1.python基本数据结构的使用:列表、字典等2.python两个模块的使用:os和json1.os.rename(文件1,文件2)2.json完成自动识别字典、列表,并识别后进行自动转换3.python函数的定义和调用4.标志位的灵活…

echo 和 echo 的区别

echo > 会将目标文件清空后再写入 echo >> 在目标文件后追加写入转载于:https://www.cnblogs.com/EnzoDin/p/7655665.html

spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计

一、引子 最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! spring security 4.2.2文档:http://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/#el-access-web…

扩展Linux虚拟机硬盘、分区一例

在给客户部署Linux虚拟机时,我一般都会单独做出一个分区来存储客户的所有数据,并取名为data。/data分区的默认大小为35G,随着时间的发展,有的客户提出扩大/data分区的需求。下面是我在ESX4.0上的实施步骤:注&#xff1…

编写高质量代码:改善Java的151个建议八(泛型和反射)93

该书籍PDF下载地址&#xff1a;http://download.csdn.net/download/muyeju/10001473 93.java的泛型是类型擦除的 Java的泛型类型在编译期被擦除 94.不能初始化泛型参数和数组 95.强制声明泛型的实际类型 98.泛型建议采用的顺序List<T>&#xff0c;List<?>&#xf…

ospf DN-BIT位

ospf DN-BIT位 在上一期问鼎OSPF中&#xff0c;我们介绍了OSPF特殊区域的设立&#xff0c;以及这些特殊区域中可以使用的LSA。从前几期的介绍中&#xff0c;我们知道&#xff0c;OSPF拥有一个最为人津津乐道的能力&#xff0c;就是能够计算出无环的路由。不管是区…