ASP.NET中状态(信息)保持方案有如下几种:
客户端的状态信息保持本质上来说有3种:隐藏域/Cookies /Querystring(URL传参)
服务器端: Session(会话)/ Application/ Caching(缓存)/DataBase(数据库)
常用的四大状态(信息)保持方式为:ViewState 、 Cookie [服务器端];Session、Application [服务器端]
ViewState(页面级):
使用ViewState的前提:页面上必须有一个服务器端窗体标记(<form runat=“server”>)
保存的数据只有在当前页面不关闭的情况下才能够使用
ASP.NET 的 .aspx页面特有,页面级的;就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式
服务器端控件(除那些在查看看源文件以表单标签存在的[如:文本框,按钮等])的值大多都会自动保存在ViewState中
非单值服务器控件的状态也自动保存在ViewState中
存储的值得类型为object类型 (必须可以进行序列化)
使用方式
用户数据保存方式示例:
当点击submit按钮的时候 页面数字依次刷新
aspx:
<form id="form1" runat="server">
<div>
<input id="Submit" type="submit" value="submit" />
</div>
</form>
aspx.cs:
1 int num = 0;
2 if (!IsPostBack)
3 {
4 ViewState["num"] = num;
5 }
6 else
7 {
8 num = int.Parse(ViewState["num"].ToString());
9 num++;
10 ViewState["num"] = num;
11 }
12 Response.Write(num);
通过查看原源可以看到如下代码:
1 <form method="post" action="Viewstate.aspx" id="form1">
2 <div class="aspNetHidden">
3 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTEzNDM3NzkxOQ8WAh4DbnVtAg1kZFjP0kir7oNa1uhkqdxh/XYVmMmQtWmVm8yOjozghxWo" />
4 </div>
5
6 <div>
7 <input id="Submit" type="submit" value="submit" />
8 </div>
对比编译时的代码此代码段多出了一个隐藏域,正是这个隐藏域的value 记录了上一次的数据使得每次点击submit按钮数据得以依次增加
通过工具可以查看到隐藏域value存储的信息如下图:
隐藏域value的值到底是怎嘛来的呢? 它是由viewstate对象序列化后经过Base64编码后形成的 。 读取时浏览器对value进行反编译然后反序列化最后输出。这个过程是自动进行的
应用: 大多是一些小页面。比较大的页面一般不会使用它(如:淘宝)
禁用ViewState的方法,禁用单个控件的ViewState设定enableviewstate=false,禁用ViewState以后TextBox版本不受影响,Div版本受影响,因为input的value不依靠ViewState。
禁用整个页面的,在aspx的Page指令区加上EnableViewState="false" 。内网系统、互联网的后台可以尽情的用ViewState。
WebForm的IsPostBack依赖于__ViewState
Cookie:
Cookie是一种能够让网站服务器把少量数据(4kb左右)储存到客户端的硬盘(设置了过期时间)或内存(不设置过期时间),并且读取出来的一种技术。
浏览器访问一个站点时,只将属于当前站点的Cookie发过到服务器。(根据域名)—(没必要把每家医院的病历本都带过去。)
Cookie不兼容浏览器!(不同浏览器不共享Cookie文件数据)
服务器端语言和客户端语言都可以操作
cookie的读和写都是浏览器做的
存储的数据类型为字符串
使用示例:
写:
1 HttpCookie hc = new HttpCookie("test", "My is test");
2 // 设cookie的过期时间。
3 hc.Expires = DateTime.Now.AddDays(7);
4 Response.Cookies.Add(hc);
读:
1 HttpCookie hc = Request.Cookies["test"];
2 if (hc!= null)
3 {
4 Response.Write(hc.Value);
5 }
如果服务器两次输出同一名称的cookie则相当于对cookie重新赋值
* 服务器向浏览器写出Cookie实际上就是在 响应报文中 生成响应行:
* Set-Cookie: uinfo2=123; expires=Mon, 06-Jun-2011 06:48:47 GMT; path=/
* 浏览器读取此 响应行后 会自动在客户端硬盘中产生一个Cookie文件,名为:
* Cookie:administrator@localhost/,注意@后的 localhoust/ ,实际上是颁发此Cookie网站的域名;
* 当浏览器下次再访问此域名时,就会自动将 后缀为 localhoust/ 的cookie文件内容发送到服务器
cookie的删除 : 服务器是不能直接的去删除浏览器上的cookie的,但是可以过设置cookie的过期时间来删除cookie(将过期时间设为-1)
cookie. Path(为指定的文件夹生成Cookie)
cookie.Domain (域/域名)
Cookie是和站点相关的,并且每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。Cookie也是保存在浏览器端的,而且浏览器会在每次请求的时候都会把和这个站点的相关的Cookie提交到服务器,并且将服务端返回的Cookie更新到硬盘,因此可以将信息保存在Cookie中,然后在服务器端读取、修改。服务器返回数据除了普通的html数据以外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新本地浏览器的Cookie就可以。
哪怕请求jpg、js、css这种文件也会带着Cookie,因为服务器端可能要进行Session的操作,比如判断是否登录。互联网优化的案例:图片服务器和主站域名不一样,降低Cookie流量的传输
Session:常用于保存登录用户ID、验证码
不同的浏览器不能共用session 因为不同的浏览器保存的sessionid(可以通过工具监视响应报文看到)不同
存储的数据只为某个客户端服务 ,并且能被网站的所有页面访问 跟cookie类似
Session只可由该会话的用户访问(因为SessionId的东东以cookie的方式保存访问者浏览器的缓存里了)
当会话过期或终止时,服务器就会清除 Session 对象
任何一个类在使用session的时候 都要告诉类要使用session,一般应用程序默认情况下不会还原session
一般应用程序在使用的时候 需添加:using
System.Web.SessionState并实现IRequiresSessionState接口而aspx.cs、aspx则不需要,因为aspx.cs
系统在默认情况下已经实现了IRequiresSessionState接口(可以通过反编译工具看到),
aspx原本就是继承与aspx.cs的所以它也就间接的实现了IRequiresSessionState接口
如果浏览器禁用了Cookie可以启用Url来传递SessionID。
开始并为Session赋值(存储的数据为object类型):
取值:
string strName = Session["uName"].ToString();
销毁(取消/退出):
Session.Abandon();//销毁服务器端的Session对象
Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁
Session常用属性、方法
属性
|
描述
|
SessionID
|
唯一用户会话标识符
|
TimeOut
|
用户超时(单位:分钟),默认20分钟
|
Count
|
会话状态集合中的项目数
|
方法
|
描述
|
Abandon方法
|
用于显式结束会话。
|
Application :
在服务器端保存共享数据的一种方式
但每次只能有一个访问者访问
使用示例:
// 写入:
// 锁定
Application.Lock();
// 存入数据
Application["num"] = 0;
// 解锁
Application.UnLock();
// 读取:
Response.Write(Application["num"].ToString());
多用于全局应用程序类中来记录数据 例如:记录当前网站的同时是在线人数(不准确的)
相关推荐
ASP.Net学习之常用模块整理 .NET C sharp
asp.net系统对象与状态保持总结!!1.内置对象:page,request,response,server2.状态保持cookie,session,application
ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP...
ASP.NET中几种状态管理技术的分析与比较
讲述asp.net生命周期中回话状态的作用,意义,以及编程方法。
不断更新中 Asp.net页面内传参数方法 ... Asp.net获取请求的用户信息IP地址 获取世界IP地址库显所在城市信息 MySQL事务处理 SQL内部常用函数 为gridview“删除”列添加确认对话框
ASP.NET常用语句1--20条,(很实用的) ASP.NET常用语句1--20条,(很实用的)
ASP.NET程序中常用代码ASP.NET程序中常用代码ASP.NET程序中常用代码ASP.NET程序中常用代码
ASP.NET 参考手册 在 W3School,我们提供完整的 ASP.NET 参考手册,其中包括内建对象和组件,以及它们的属性和方法。 ASP.NET 实例 ASP.NET 实例 一系列的 ASP.NET 实例。 内容目录 ASP.NET 简介 本章解释 ASP.NET...
ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP...
它是.NET类库的子集,是ASP.NET开发人员手册一书中截取的,方便大家,方便你我
ASP.NET程序中常用代码汇总,希望大家用得上
如何在ASP和ASP.NET中共享会话状态,马文婕,李娜,ASP.NET的出现大大提高了编写的站点的性能,但传统的ASP技术也需要同时应用,两种技术间会话状态的共享是必须解决的问题。文章即对�
Asp.net Treeview 控件常用属性.
asp.net 个人常用类库,后期开源所有的类库.包括对B/S,C/S模式的常用处理.绝对值得使用.当然期望更多的高手一起完善这个类库。QQ:57872034
ASP.NET程序中常用的三十三种代码
asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典聊天室asp.net经典...
asp.net常用语句
ado.net总结——一些asp.net常用的方法ado.net总结——一些asp.net常用的方法ado.net总结——一些asp.net常用的方法
asp.net学生信息管理系统