Web程序保存状态的方式

天翼云高级解决方案架构师认证重点知识 实时迁移是指在数据库复制服务器能够同时连通源数据库和目标数据库的情况下,只需要 配置迁移的源、目标数据库实例及迁移对象即可完成整个数据迁移过程,再通过多项指标 和数据的对比分析,帮助确定合适的业务割接时机,实现最小化业务中断的数据库迁移。天翼云混合云解决方案:依托中国电信云与网的优势,以及丰富的项目经验,为客户提供包含 云专线,云网关,私有云,混合云等完整的解决方案。中转站,存储应用程序不同组件间传递的消息,从而做到在应用程序的不同组件之间传输 消息时,不要求各个组件同时处于可用状态。 阅读详情

原路径 http://topic.youkuaiyun.com/t/20040508/20/3043099.html

1、Application   这是Web应用程序生命期中的全局保存区,保存在Application中的数据是全局有效的;在Asp.Net中,有一个应用程序池,其中保存了数个(或数十个)应用程序实例,每一次请求都会从池中取一个实例来处理请求,在请求完毕之前,这个实例不会接受其他请求;这就出现一个问题,同一时间可能存在多个应用程序,也就是多个线程,这些线程都存在访问Application的可能,所以在对Application中的对象进行处理的时候需要考虑线程同步的问题;实际上Application对象内部实现了一个线程锁,调用它本身的Add、Remove等方法的时候会自动调用加锁和解锁的操作,但是出于性能考虑,对于直接通过索引器或其他方式得到其中的对象并进行操作的过程,Application并没有自动处理线程同步,需要利用下列类似的代码来处理:
                Application.Lock();
                ((int)Application[ "Count "])++;
                Application.Unlock();
        值得注意的是,调用了Lock之后,如果没有显示的调用Unlock,那么在这个请求结束的时候,Application对象会自动解锁,这样防止了造成死锁的问题,但是为了代码的健壮性,调用完Lock并且修改完毕应该立即的调用Unlock方法。
Application对象本质上就是一个Hash表,按照键值存放了对象,由于对象是全局并且存放在服务器,并且存在多线程同时访问,所以,Application里面存放的应该是访问较多,修改较少并且是全局至少大部分功能会使用的数据,例如计数器或者数据库连接串等。

    2、Session     在Asp.Net内部,有一个StateApplication来管理Session,实际上就是一个辅助进程,处理Session到期、创建的特殊请求,在收到每一次请求的时候,辅助进程就会调用状态服务器(可以通过Web.config设置不同的状态服务器)来获取Session,如果没有对应该SessionId的Session,则会新建一个,然后绑定到上下文中(HttpContext);与Asp不同的是,Session的状态服务器有多种,目前在Asp.Net内部实现了三种:
            1)   InProcStateClientManager   这是传统的Session保存方式,但是还是有些细微差别  
            2)   SqlStateClientManager   这是将Session保存到数据库方式
            3)   OutOfProcStateClientManager   这是将Session保存到进程外的方式
        Asp.Net的Session机制有一个特点,就是处理Session的辅助进程与保存Session的状态服务器是分开的,按照MSDN的说法,有下列好处:
            “因为用于会话状态的内存不在   ASP.NET   辅助进程中,所以可以实现从应用程序故障的恢复。”
            “因为所有状态与辅助进程不存储在一起,您可以干净地跨多个进程对应用程序进行分区。这种分区可以显著地提高多个进程的计算机上应用程序的可用性和可缩放性。”
            “因为所有状态与辅助进程不存储在一起,所以您可以跨运行于多个计算机上的多个辅助进程对应用程序进行分区。”
Asp.Net的Session机制个人观点,感觉灵活性比较好,内部实现也比较巧妙,但是实际上因为没有做过多的测试,所以应用上会不会像它说的那么美好,不敢打包票。有机会,我会单独写篇文章来深入的探讨Asp.Net   内部的Session机制。

    3、Cookie     这个没甚么好说,实际上Asp.Net与Asp的Cookie没甚么分别,也许这项技术毁誉参半,而且比较依赖客户机实现,MS也没什么改进的。

    4、ViewState   这是我们今天重点讨论的;实际上ViewState并不神秘,就是一个Hidden字段,但是它是服务器控件状态保存的基础;不熟悉的朋友可以用IE查看Html源码,找到一个名为 "__VIEWSTATE "的Hidden字段,其中有一大堆乱七八糟的字符,这就是页面的ViewState。

          做过Web程序的人可能都有这种痛苦的体会,有时候为了处理页面上面比较复杂的功能,常常会加很多Hidden,然后在服务器端用一大堆判断来分析目前的状态,写起来烦人,写完了代码更是难看;实际上,ViewState就是帮我们系统的实现了保存控件状态的功能,服务器端控件能够在多次请求间保存状态也全靠它。

我们首先建一个测试的页面:
    <%@   Page   language= "c# "   Codebehind= "ViewStateTest.aspx.cs "   AutoEventWireup= "false "   Inherits= "CsdnTest.ViewStateTest "   %>
    <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN "   >
    <html>
        <head>
<title> ViewStateTest </title>
<meta   name= "GENERATOR "   Content= "Microsoft   Visual   Studio   7.0 ">
<meta   name= "CODE_LANGUAGE "   Content= "C# ">
<meta   name= "vs_defaultClientScript "   content= "JavaScript ">
<meta   name= "vs_targetSchema "   content= "http://schemas.microsoft.com/intellisense/ie5 ">
        </head>
<body>
<form   id= "ViewStateTest "   method= "post "   runat= "server ">
<asp:Button   ID= "btnPostBack "   Runat= "server "   Text= "Post   Back "   Width= "85px "> </asp:Button>
<br/>
<asp:CheckBox   ID= "chkTest "   Runat= "server "   Text= "This   is   a   check   box "> </asp:CheckBox>
</form>
</body>
    </html>

      这是用Vs.Net设计出来的一个简单的页面,里面包含了一个服务器端的按钮和一个CheckBox,然后我们在服务器端响应按钮的事件:

      private   void   btnPostBack_Click(object   sender,   System.EventArgs   e)
      {
  [1] Response.Write(   "ViewState   : "+Request.Params[ "__VIEWSTATE "]+ " <br/> "   );

  [2] string   decodeValue   =   Encoding.UTF8.GetString(   Convert.FromBase64String(   Request.Params[ "__VIEWSTATE "]   )   );

  [3] Response.Write(   "ViewState   decode   : "+decodeValue+ " <br/> "   );

  [4] object   viewstate   =   (new   LosFormatter()).Deserialize(   Request.Params[ "__VIEWSTATE "]   );
 
  [5] Response.Write(   "ViewState   Object   : "+viewstate.GetType().Name   );
      }

      为了方便看,我加上了行号;第一行我们把ViewState的值打出来,第二行是什么呢?实际上ViewState保存到客户端的一串字符串就是内部的ViewState通过某种方式序列化之后再经过Base64编码得来的,所以我们把Base64编码的字符串反编码一次再打出来;至于第四行,我先不说,先看执行结果:
      运行之后,页面上什么都没有,除了按钮和CheckBox(废话   :)),我们点击按钮,然后结果如下:

    [A]       ViewState   :dDwxMjU2MDI5MTA3OztsPGNoa1Rlc3Q7Pj6Gg0Qzm+7gacYWcy0hnRCT9toOdA==
    [B]       ViewState   decode:t <1256029107;;l> D3i   s-!   t
    [C]       ViewState   Object   :Triplet  

      然后我们来分析这个结果,A中显示的就是ViewState传到客户端的值,B中显示的是通过Base64反编码之后的值,从这里面好像还是看不出什么,C中出现了一个:Triplet   ?这是什么呢,我们回到上面的代码:
            object   viewstate   =   (new   LosFormatter()).Deserialize(   Request.Params[ "__VIEWSTATE "]   );

      注意我们使用了一个LosFormatter类,实际上这个类就是Asp.Net内部为ViewState提供序列化的类,它有两个方法,一个是Serialize,就是序列化一个对象,一个是Deserialize,是反序列化,我们这里使用了反序列化的方法来把ViewState直接反序列化成一个对象,然后把这个对象的类型打出来,这个对象就是:Triplet类型,实际上Asp.Net中页面保存的ViewState就是这个类型,我们先分析一下LosFormater,再来细说.
      我们再回来看打出来的结果B:t <1256029107;;l> D3i   s-!    
t,实际上通过查看LosFormatter反编译后的代码,大致上可以看出它序列化的方式是很简单的,就是判断要序列化对象的类型,如果不是直接序列化的类型,则把它的类型记录下来,然后在递归序列化它的属性,我们看B中的 "t "就是表示Triplet这个类型,这个类型有三个属性,这三个属性包含在 " < "和 "> "之间,用 "; "分割,而最后面的D3i   s-!    
t据我分析应该是一个防止ViewState被改变的Hash值,这个不是很确定,因为反编译的代码实在是很难看,我只是了解之后就没仔细看了。

      我们刚刚分析出来Page中的ViewState反序列化之后是Triplet这个类型,实际上这个类在MSDN中就查得到,它就是一个包含了三个对象的对象,说简单点,它就是一个能放三个箱子的大箱子(好像还是说的比较糊涂,呵呵),它有三个属性:First、Second、Thrid   :),分别代表三个对象。
      对应到Page当中,First是Page.GetTypeHashCode()的返回值,这个方法是System.Web.UI.Page定义的一个保护的虚拟方法,返回一个整型,由Aspx文件生成的类来实现的,因为这个类是有Asp.Net负责在运行期生成源代码并编译,它会计算出一个大常量作为返回值,这个返回值在整个Web应用程序所有的Page中是唯一的。(提一句题外话,Asp.Net自动产生的源代码可以到   系统盘:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\Temporary   ASP.NET   Files下面去找),这个唯一的Hash值是为了在ViewState中产生一个标记,使这个ViewState只适用与对应的页面。
      Second则是通Control.SaveViewStateRecursive方法递归保存页面控件树的ViewState返回的对象,也就是真正的ViewState的数据。
      Third中保存的是当前页面需要PostBack的控件名的列表。
分析了页面的ViewState的构成,我们再来看Control的ViewState的实现。ViewState是System.Web.UI.Control类实现的一个属性,这个属性的类型是System.Web.UI.StateBag,这个类就包含了ViewState数据结构的实现,实际上它的内部也就是个Hash表,通过Key值来保存和检索数据。
    那么服务器控件是怎么实现保存状态的呢?
    我们知道,所有的服务器控件都是从System.Web.UI.Control派生的,所以都拥有ViewState这个属性,在Control内部,定义了两个Protected的虚拟方法:
        protected   virtual   object   SaveViewState()  
    和
protected   virtual   void   LoadViewState(object   savedState)  

    这两个方法是给子控件派生用来保存和读取自己的ViewState的,比如我们有一个自己写的控件,往ViewState中保存了一个字符串,那么我们的方法大致像这样:
        protected   virtual   object   SaveViewState()
        {
              object[]   states   =   new   object[2];
              states[0]   =   base.SaveViewState();             //记得保存父控件的ViewState
              states[1]   =   "Hello,I 'm   timmy! ";                 //这里保存我们自己的
           
              return   states;   //返回重新包装后的保存对象
        }
        获取的时候:
        protected   override   void   LoadViewState(object   savedState)     //这里的savedState就是我们Save的时候return   的object数组
        {
              object[]   states   =   (object[])savedState;
              base.LoadViewState(   states[0]   );       //把父类的数据给他自己去解析
              string   myData   =   (string)states[1];     //获取我们自己的数据
        }
      我们可以按照自己的方式来保存,不一定非要像上面这样用数组,实际上我们可以用任何支持序列化的对象都可以,父类并不关心子类如何保存,我们只要在Save和Load的时候使用同样的方式,并且把正确的数据传递给父类方法就可以了。
     
      另外,还有一个问题就是我们使用的Control的ViewState是Key-Value这样的键值对,那它是怎么保存的呢?
      实际上很简单,System.UI.Web下面有一个类叫Pair,呵呵,这个和Triplet差不多,只是它里面只有两个对象。StateBag保存的时候,First会存放所有Key值的数组,Second则存放所有Value的数组。

      到现在,我们了解了ViewState是如何序列化并且保存到客户端,也了解了控件怎么保存自己的ViewState,那么这二者是怎么结合的呢?

也就是整个页面的控件树的ViewState是怎么保存和读取的呢?

      在Control内部有两个internal的方法:
      internal   object   SaveViewStateRecursive();
      internal   void   LoadRecursive();
      这两个方法由System.Web.UI.Page来调用,Page在Render结束后就会调用SavePageViewState方法,SavePageViewState方法会调用Control的SaveViewStateRecursive()方法,这个方法就是通过递归调用每一个Control.Controls的SaveViewStateRecursive方法来保存控件树中所有控件的ViewState。到这里,可能聪明的朋友要问了,既然SaveViewStateRecursive是递归调用保存的方法,那么我们上面写的SaveViewState()方法又有什么用呢?
      我们知道,Control.Controls可能会有很多个,而且我们的SaveViewState()只保存了当前控件的数据,而没有记录控件树的结构,那么如果我们递归SaveViewState()方法来保存数据的话,那么控件树的结构就会丢失,那么Load的时候就没办法还原了,实际上在SaveViewStateRecursive方法中大致的代码是这样:
        [1]   获取控件自己的ViewState(调用SaveViewState方法)
        [2]   循环子控件
          {
                  定义两个动态数组,一个保存控件的索引,一个保存递归调用子控件SaveViewStateRecursive方法返回的值
          }
        [3]   定义一个Triplet(呵呵,这个东西又出现了)
        [4]   First保存本控件的ViewState
        [5]   Second保存子控件的索引
        [6]   Third保存递归子控件SaveViewStateRecursive方法的返回值
        [7]   返回Triplet
      这样就保存了整个控件树的ViewState和控件树的结构

      Load的方式与Save差不多,只是Load的时候会从savedState中获取子控件的索引来依次递归子控件的LoadRecursive()方法,这样才能保证正确的把保存的数据传给子控件。


      到这里,ViewState的实现我们大致了解了一下,最后得出一些结论:
      1、ViewState是存放在客户端,因此会减轻服务器的负担,是一种比较好的保存数据的方式。
      2、因为ViewState本身的限制,只能保存可以序列化的对象,而且最好不要放太多东西,能省则省,以免在减慢传输的速度,以及加重服务器解析的负担。
      3、我们通过很简单的方式就可以把ViewState里面的值获取出来,我们上面讨论了一些,虽然没有把解析的代码写出来,但是利用LosFormatter可以得到ViewState反序列化后的对象,那么要解析出来简直是易如反掌;所以ViewState在安全性上面还是比较差,建议不要
存放比较机密和敏感的信息,尽管ViewState可以加密,但是由于ViewState要保存在客户端,天生就有安全性的隐患。
      4、实际从技术角度,ViewState没有任何新意,但是结合服务器控件的设计还是很巧妙的。
     

天翼云高级解决方案架构师认证重点知识点串讲 一、架构设计基础必备掌握知识点:传统IT架构演进过程: IT架构是指导IT投资和设计决策的IT框架,是建立企业信息系统的综合蓝图。IT架构通常分为数据架构、应用架构和技术架构三部分。此外,随着数据安全的问题日益受到重视,许多企业的IT架构也将安全架构置于重要的位置上。单体引用:通常服务器操作系统使用linux,应用程序使用... 阅读详情

相关推荐

37张图详解MAC地址、以太网、二层转发、VLAN

MAC 地址 每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。 MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。 现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保.

networktp的博客 4745

Web应用三层架构和Java后端(应用层)三层架构

2.接口层(API层):该层用来对接UI层,为UI层提供数据集业务处理接口,一般将其称为Controller。此外,现在的应用开发一般会对接多种用户端UI层,所以尝尝这里使用Rest方式提供API接口,供各个应用端使用,因此也可以称之为API层。1.业务逻辑层:该层主要承担两大职责,一是定义业务领域对象,或称为业务实体,二是业务逻辑的具体实现。2.应用层:是系统核心价值部分,其关注业务规则的制定和业务流程的实现,负责与UI层进行交互及数据存储的处理,常称为后端。上述三层应用架构指的是整个应用架构上的划分。

Java的第一人称视角 4363

主流双目相机技术参数横向评测:从ZED到国产新锐

本文对主流双目相机技术参数进行了横向评测,涵盖ZED、Bumblebee等国际品牌及国产新锐产品。详细分析了分辨率、帧率、视场角等关键参数,并针对机器人导航、AR/VR交互、工业检测等场景提供选型建议。特别推荐ZED相机在科研领域的成熟应用,以及国产方案在长基线设计和主动双目技术上的创新突破。

weixin_33670786的博客 318

Web应用中的状态(会话状态、应用状态、有状态协议、无状态协议、REST无状态约束)

Web应用中的各种状态结论先行组件交互层次的“状态”应用软件使用层次的“状态”应用软件存储数据层次的“状态”网络传输层次的“状态”HTTP是无状态协议是什么意思?REST中的无状态约束是什么意思?HTTP是无状态协议是什么意思?为什么将HTTP设计为无状态协议?为什么REST要包含无状态约束?(一)Web的需求(二)利大于弊违背无状态交互约束的典型例子:基于session的会话管理机制应用状态应用...

u012324798的博客 3366

JAVA进阶面试题:如何设计一个高并发系统?

如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万。那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部署了多少台机器

uuop155的博客 1019

从零构建:Trinamic API在STM32上的深度移植与TMC-IDE通信实战

本文详细介绍了如何从零开始在STM32平台上深度移植Trinamic API,并实现与TMC-IDE工具的稳定通信。内容涵盖SPI底层驱动定制、寄存器配置、高级功能实现及调试技巧,重点解析了TMC5160芯片的集成实践,帮助开发者构建可靠的嵌入式运动控制系统。

w1x2y3的博客 254

Web应用程序状态管理

状态跟踪的方式: 1,隐藏表单 2,cookie 工作流程:客户端向服务器发出请求,服务器调用response.addCookie()方法,附加cookie对象信息。产生响应时,会增加set-cookie响应头,在该响应头中描述cookie信息。当客户端再次向服务器发出请求时,会在请求信息中增加cookie请求头,将cookie信息再发送给服务器。服务器发现客户端发送给服务器的信息,和自己发

hugo_java的博客 556

SAR ADC设计——SAR Logic原理

SAR ADC设计——SAR Logic原理 参考:集成电路设计实践 SAR ADC 清华大学 李福乐 文章目录SAR ADC设计——SAR Logic原理一. Overview二. TSPC(True Single Phase Clock)三. SC_Gen(Sequential Control Generator)四. LATCH_Dynamic五. 时序控制逻辑总结六. SW产生七. DO产生八. GT产生九. SAR Logic模块总结 一. Overview 输入:CKC,CompB,SAMPL

夏风喃喃的博客 1万+

(11)Web程序保存状态的几种方式,Application,Session,Cookie,ViewState

WEb程序保存状态的方式有这样几种: 1.Application:保存在Application中的数据是全局有效的;Application里面存放的应该是访问多修 改较少并且是全局至少大部分功能会使用的数据,例如计数器或者数据库连接串等。 Application.Lock(); ((int)Application["Count"])++; ...

weixin_34186950的博客 156

KingSCADA3.8保姆级安装教程

大家好,我是雷工!最近开始学习KingSCADA,今天这篇详细记录安装KingSCADA3.8的过程。首先下载需要的安装版本,此处以从官网下载的最新版本KingSCADA3.8为例,双击:Setup.exe;

做有价值的事,积累有价值的笔记! 1万+

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

Django系列之web应用与http协议

第一节:最简单的web应用程序 web应用程序指供浏览器访问的程序,通常也简称为web应用。应用程序有两种模式C/S,B/S。C/S是客户端/服务器程序。也就是说这类程序一般独立运行。而B/S就是浏览器/服务器应用程序,这类应用程序一般借助浏览器来运行。web应用程序一般是BS模式。web应用程序首先是应用程序,和用便标准的程序语言,如Java,PHP,Python等编写出来的程序没有...

weixin_30776863的博客 116

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

Asp.net状态管理

     Web应用的特点是服务方不保持状态,如果不采用某种方法,当一次Web请求完成后,服务方的对应状态就会消失。也就是说每刷新一次页面或者相应一个事件,在服务方都要重新生成一个实例。响应完成后,这个实例也随之消失了。    在.net中,有2中方式来保存状态,包括客户端和服务端。    一 客户端  ViewState属性    将服务端控件的viewState属

620

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

此页的状态信息无效,可能已损坏。

1、web.config      2、接受回传页面 去掉  Forms 标签 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 此页的状态信息无效,可能已损坏。源错误: [没有相关的源行]源文件: c

949

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Cookie/Session机制详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  Cookie机制 在程序中,会话

瞧字不识 46万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

web007

session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上,在一次会话的多次请求间共享数据,将数据保存在服务器上。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。登陆数据处理页面,先获取登陆页面复选框的value值,如果获取的是 null,则表示用户没勾选 “自动登陆”,如果不为null,那么就表示用户勾选了 “自动登录”,就将用户名保存到 cookie里面,并设置 cookie的有效期。

2301_76964036的博客 233

Http无状态协议

Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存鱼会话有关的任何信息。自己的理解,在asp.net里:每次提交服务器的页面没有任何关系,每次记录在页面的信息下次提交是记不住的,(除了应用本身可能已经存储在全局对象中的所有信息外)在.net里实际就是ViewState,ViewState是as...

weixin_30791095的博客 63

web 会话编程的实现.txt

会话编程的实现 将会话session对象保存在web应用服务器的内存中,每个对象对应一个sessionId, 1.将sessionId保存在Cookie中,每次页面请求时通过sessionId访问服务器内存中的session对象。 2.如果Cookie被禁用,可用重写URL的方式将session保存在URL中。 ...

iteye_19838的博客 137

http协议

最简单的web应用程序 基于socket实现一个最简单的web应用程序: import socket sock=socket.socket() sock.bind(("127.0.0.1",8800)) sock.listen(5) while 1: print("server is working...") conn,addr=sock.accept(...

weixin_30888413的博客 81

ASP.NET中Cookie之Cookie基础知识

ASP.NET中Cookie之Cookie基础知识是什么呢?ASP.NET中Cookie编程都要明白什么呢?首先让我们看看ASP.NET中Cookie的含义ASP.NET中Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法。例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序就可以检索以前保存的信息。

暮日风远 440

转:什么是cookie

什么是 Cookie? ­Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。 ­­假设在用户请求访问您的网站 www.contoso.com 上的某个页面时,您的应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie。用户的浏览器在获得页面的同时还得到了这个 Cookie,并且将它保存在用户硬盘上的某个文件夹中。 ­­以后,如果该用户再次访问您站点上的页面,当该用户输入 U

tenfyguo的技术专栏 688

RESTful应用程序

REST的概念和RESTful应用程序的风格。 MVC用来定义应用的结构,REST则用来定义用户与应用之间的交互方式(就是定义了交互的一种规范)。 REST概念:资源的表现层状态转化,关键词:资源、表现层、状态转化。 资源:用户能够获取的信息都叫资源,我们上网浏览的信息都是资源。 以访问博客为例: 用户请求访问博客列表第一页,服务器接收请求并响应,返回第一页的内容到屏幕上,返回的内容可以是html格式也可以是xml、txt甚至可以是图片、音频或者视频等等,服务器返回内容的格式就是表现层。

u013868495的博客 289

在 .NET 中使用 WEB SERVICE 的CallBacks机制 (5)

3. Web Form对于WebService”A”我们使用的浏览器作为客户端。 每个 Web Methods有自己的按钮触发事件,在栈(Stack)中来保存Session类的状态。 页面的更新基于下面的机制:事件处理程序把数据压到Session栈,在Page_Load时提取出来并且插入到ListBox control中。另一个议题是以异步方式调用DoSomeWorkA方法,它可以产生和处理c

elite的技术前沿 1169

什么是Cookie?Cookie有什么作用?

什么是Cookie?Cookie有什么作用?Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法。例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序就可以检索以前保存的信息。本文概要介绍 Cookie 在 ASP.NET 应用程序中的应用,为您展示在 ASP.NET 中应用 Cookie...

weixin_33928467的博客 347

cookie和session的使用和区别

一、cookie:(保存在客户端) 1.过程:生产-->保存-->使用(参考http://blog.csdn.net/xjx_1024/article/details/5437300)      1)生产 //创建一个Httpcookie的实例,Sample标示 HttpCookie co=new HttpCookie("Sample"); //往实例中添加资料,其中第一个str

技术 830
上一篇: js 五子棋(无ai,仅判断胜负)
下一篇: ASP.NET 应用程序与页面生命周期(意译)
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值