`
devgis
  • 浏览: 139349 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ASP.NET 之四大常用状态(信息)保持方式

 
阅读更多

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类型):

 Session[“uName”]=“name”;

取值:

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());
复制代码

多用于全局应用程序类中来记录数据 例如:记录当前网站的同时是在线人数(不准确的)

版权所有:jory
分享到:
评论

相关推荐

    Asp.Net常用知识集锦

    本资源“Asp.Net常用知识集锦.exe”很可能是一个包含教程或者代码示例的压缩包,旨在帮助开发者深入理解和熟练运用Asp.Net进行开发工作。 在Asp.Net的常用知识中,我们可以涵盖以下几个核心概念和技能: 1. **页面...

    第4章 ASP.NET状态管理

    状态管理是ASP.NET中的另一个核心概念,它包括ViewState、Session、Cookie、Application和Cache等机制,用来在页面间或用户会话期间保持数据。ViewState用于在页面往返中保留控件的状态,Session用于跨页面跟踪用户...

    ASP.NET程序中常用代码汇总

    5. **视图状态(ViewState)**:ASP.NET用于在页面间保持状态的一种机制,确保在PostBack期间控件值不丢失。合理使用ViewState可避免不必要的性能开销。 6. **会话(Session)**:用于在用户会话期间存储和检索数据。...

    ASP.NET程序中常用代码

    ASP.NET程序中常用代码ASP.NET程序中常用代码ASP.NET程序中常用代码ASP.NET程序中常用代码

    asp.net常用语句

    本文将深入探讨ASP.NET中的常用语句,帮助你更好地理解和运用这些语句。 一、页面生命周期与事件处理 ASP.NET页面生命周期包含一系列的阶段,如初始化、加载、验证、呈现和卸载。在这个过程中,你可以使用特定的...

    asp.net开发常用文档

    本压缩包“asp.net开发常用文档”提供了一系列关于ASP.NET开发的资源,对于那些不太熟悉软件开发流程的新手来说,是非常有价值的参考资料。 1. **ASP.NET概述** ASP.NET是.NET Framework的一部分,它提供了丰富的...

    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到ASP.NET的会话状态管理

    ASP.NET还引入了ViewState和ControlState,它们是页面级别的状态管理工具,与会话状态不同,它们只在单个页面的生命周期内保持数据。 在ASP应用程序迁移到ASP.NET时,会话状态管理的兼容性是一个关键问题。开发者...

    Web Service中保持ASP.net的状态

    在Web服务中保持ASP.NET的状态是一项关键任务,尤其是在开发基于HTTP协议的应用程序时,由于HTTP协议的无状态特性,开发者需要寻找有效的方式来跟踪用户状态。ASP.NET提供了一种强大的解决方案,即通过`System.Web....

    ASP.NET文件参考 asp.net asp.net技巧

    IIS(Internet Information Services)作为常用的Web服务器,可以托管ASP.NET应用程序。Visual Studio提供了强大的调试工具,帮助开发者找出并修复代码中的问题。 总的来说,ASP.NET提供了丰富的工具和库,使开发者...

    asp.net常用功能总结

    视图状态是ASP.NET用于在页面往返过程中保持控件状态的技术。它可以保存控件的属性值,确保在回发时数据不会丢失。 5. **PostBack和PostBackUrl** PostBack是用户操作导致页面重新提交到服务器的过程,...

    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学生信息管理系统

    5. **状态管理**:ASP.NET提供了ViewState、Session、Cookie等多种状态管理机制,用于在HTTP无状态的环境中保持用户会话状态,例如跟踪当前登录用户的信息。 6. **错误处理**:使用ASP.NET的异常处理机制,可以捕获...

    ASP.NET常用类库

    它是.NET类库的子集,是ASP.NET开发人员手册一书中截取的,方便大家,方便你我

    asp.net 实例源码

    7. 视图状态:ASP.NET的视图状态机制可保存控件的状态,即使在页面回发时也能保持信息。 8. 国际化:如果实例考虑到了多语言支持,可能会用到资源文件来实现页面文本的国际化。 9. 缓存机制:为了提高性能,可能会...

    ASP.NET学习大总结+笔记

    ASP.NET提供了多种状态管理机制,如视图状态、控制状态、隐藏字段、Cookie、Session和Application状态等,帮助开发者在多个请求之间保持数据。 六、ASP.NET安全性 ASP.NET内置的安全特性包括身份验证、授权、加密和...

    ASp.NET学生信息管理系统

    【ASP.NET学生信息管理系统】是一个基于ASP.NET技术开发的网页应用程序,主要功能是实现对学生信息的全面管理。这个系统能够满足基本的学生数据录入、查询、修改和删除等操作,为教育机构或教师提供了一个便捷的方式...

    asp.net宝典/asp.net

    5. **状态管理**:ASP.NET提供了多种状态管理方法,如视图状态、隐藏字段、cookie、session和应用程序状态等,以保持用户交互过程中的信息。 6. **ASP.NET MVC**:探讨MVC模式,了解模型、视图和控制器的职责,以及...

    ASP.NET 2.0的视图状态持久性机制.doc

    ASP.NET 2.0 中,视图状态(ViewState)是一种机制,用于在用户与Web应用程序交互时保持页面和控件的状态。它是一个重要的特性,确保用户在导航网站时,页面和控件的数据能够跨多个HTTP请求得以保留。视图状态通常以...

Global site tag (gtag.js) - Google Analytics