引入:b/s(浏览器/服务器模式)区别于winform的是winform中只加载一次页面构造函数,而b/s中只要点击按钮或者其他涉及后台的操作都会调用后台代码。一般情况下为了防止服务器过载,b/s不会采用常连接,这样可以保持服务器的高性能。但b/s的缺点是连接断开之后会清除服务器资源。

问题:b/s中如果页面提交,那么重新提交(页面刷新)的时候,前面一个页面中的对象会被销毁,就会造成上一个页面中定义的对象不可用的情况。比如下面的代码。

public partial class Bs : System.Web.UI.Page
{
Unit ow ;//unit是长度单位
Unit oh ;
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)//放大
{
ow = Panel1.Width;
oh = Panel1.Height;
Panel1.Width = ;
Panel1.Height = ;
}
protected void Button2_Click(object sender, EventArgs e)//还原
{
Panel1.Width = ow;
Panel1.Height = oh;
}
}

放大操作可以实现,但是当点击还原的时候,整个蓝色面板消失。因为此时点击还原按钮,重新提交给服务器,所以服务器把前面一个页面释放了(当然如果是winform程序不会出现这种情况)这是就无法调用前一个页面的ow,oh。

解决方法:

1.静止释放(服务器容易崩溃)

2.使用静态变量

static Unit ow;
static Unit oh;

点击还原按钮可以做到还原,因为实例变量存在于对象中,静态变量存在于类中,释放的是对象。

新问题是当几个用户同时操作此网页的时候会让静态数据紊乱,所以静态数据一般用于统计访问人数,在线人数等。

3.利用状态管理机制(重要)

a:应用程序状态:随网站启动而启动,随网站关闭而关闭。用法如下:

protected void Button1_Click(object sender, EventArgs e)//放大
{
Application["ow"] = Panel1.Width;
Application["oh"] = Panel1.Height;
Panel1.Width = ;
Panel1.Height = ;
} protected void Button2_Click(object sender, EventArgs e)//还原
{
Panel1.Width =(Unit)Application["ow"];
Panel1.Height = (Unit)Application["oh"];
}

可以解决,但是属于全局的,和使用static一个道理。

b.会话状态(基本上是所有web(asp,javaweb,jsp)都要用到的一种状态管理机制):先引入连接的概念,连接是客户机一关闭连接就终止,比如学校的英语考试系统如果是webform则用的是连接,而网上在线测试(没有webform程序)用的是会话。而会话是第一次请求就表示会话开始,不管你操作或者是不操作,更甚至是关闭浏览器,你的会话都会在服务器上存在。当你在同一网站下的页面下浏览也是同一个会话,会话是通过session断断续续的进行交流。而一个会话结束的标志就是当本次请求的下次的请求超过20分钟(默认)那么则关闭会话。

session详细信息:https://www.cnblogs.com/ljq2622/p/10910201.html

(同一进程一个浏览器中其他table页都属于一个会话,除了IE不通进程不同会话,但是好像最多3个会话。)刘继光老师调试经验。

protected void Button1_Click(object sender, EventArgs e)//放大
{
Session["ow"] = Panel1.Width;
Session["oh"] = Panel1.Height;
Panel1.Width = ;
Panel1.Height = ;
} protected void Button2_Click(object sender, EventArgs e)//还原
{
Panel1.Width = (Unit)Session["ow"];
Panel1.Height = (Unit)Session["oh"];
}

注:Javaweb中session用法不同,为setattribute和getattribute。

c.视图状态(不怎么用)

protected void Button1_Click(object sender, EventArgs e)
{
ViewState["ow"] = Panel1.Width;
ViewState["oh"] = Panel1.Height;
Panel1.Width = ;
Panel1.Height = ; } protected void Button2_Click(object sender, EventArgs e)
{
Panel1.Width = (Unit)ViewState["ow"];
Panel1.Height = (Unit)ViewState["oh"];
}

d,缓存状态(和应用程序状态基本相同)

e,cookie(客户端状态机制,所以cookie保存在浏览器中,一般在浏览器文件夹下是可以找到)

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。一般cookie关闭浏览器就过期,可以设置过期时间,由于cookie存在本地,所以cookie设置过期时间长短不影响服务器性能。

cookie详细信息:https://www.cnblogs.com/ljq2622/p/10910201.html

常用于记录用户登录账户等:(如下)

protected void Page_Load(object sender, EventArgs e)//从浏览器中传过来的cookie中请求
{
if (!IsPostBack)
{
if (Request.Cookies["name"] != null && Request.Cookies["password"] != null)
{ TextBox1.Text = Request.Cookies["name"].Value;
TextBox2.Text = Request.Cookies["password"].Value;
}
}
} protected void btnLogin_Click(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(TextBox1.Text.Trim()))//传给浏览器并且存在本地文件中
{
HttpCookie hcName = new HttpCookie("name", TextBox1.Text);
hcName.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(hcName);
}
if (!string.IsNullOrEmpty(TextBox2.Text.Trim()))
{
HttpCookie hcPwd = new HttpCookie("password", TextBox2.Text);
hcPwd.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(hcPwd);
}
}

java用法:

  

 1. 创建Cookie对象,绑定数据
* new Cookie(String name, String value)
2. 发送Cookie对象
* response.addCookie(Cookie cookie)
3. 获取Cookie,拿到数据
* Cookie[] request.getCookies()

扩展用处:cookies有什么作用呢?现在上许多网站都用新用户注册这一项,有时注册了一下,等到下次再访问该站点时,会自动识别到你,并且向你问好,是不是觉得很亲切?当然这种作用只是表面现象,更重要的是,网站可以利用cookies跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。

cookie除了保存用户信息之外,也是实现session的一种方式:

 (1). 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
(2). 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
f,查询字符串(客户端状态管理机制)????????????????
 
 

web状态管理机制的更多相关文章

  1. 表格搞定 Asp.net Web 状态管理

    最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...

  2. ASP.NET Web – 状态管理

    状态类型 客户端或服务器资源 有效时间 ViewState 客户端 只在一个页面中 Cookie 客户端 关闭浏览器时会删除临时cookie,永久cookie存储在客户系统的磁盘上 Session 服 ...

  3. HTTP状态管理机制之Cookie

    一.cookie 起源 cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE.Chrome ...

  4. HTTP状态管理机制之Cookie(转)

    一.cookie 起源 cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE.Chrome ...

  5. HttpClient-03Http状态管理

    最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...

  6. redux沉思录:基于flux、状态管理、函数式编程的前端状态管理框架

    基于flux和reduce的通信和状态管理机制; 和数据库管理系统一样,redux是一个状态管理系统(或机制). const store = createStore( reducer, compose ...

  7. HttpClient4.3教程 第三章 Http状态管理

    最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...

  8. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. Unity调用安卓Android的Toast

    需求:在游戏中弹窗消息,调起安卓的Toast 项目中需要做Unity和安卓交互时,经常需要通过安卓Toast来做简单的输出,以便于测试. 方法一:Unity中,C#主导 // Unity调用安卓的土司 ...

  2. HashMap中capacity、loadFactor、threshold、size等概念的解释<转>

    最近在看HashMap的源码,有很多概念都很模糊,今天写了一个测试例子,加深对这几个概念的理解,并演示了扩容及树化的过程(见下篇博文:). 注:本文基于JDK 1.8  HashMap的结构 约定 约 ...

  3. Unity图集打包

    http://www.xuanyusong.com/archives/3304 http://www.xuanyusong.com/archives/3315 http://www.xuanyuson ...

  4. Stack堆栈的数据结构

    1.

  5. Linux下 编译lib3ds库

    从网上下载的一个QT程序链接需要用到lib3ds.a静态库. lib3ds is an overall software library for managing 3D-Studio Release ...

  6. K8s(7)-安装Web UI

    仪表板是基于Web的Kubernetes用户界面.您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源.您可以使用仪表板来概述群集上运行的应用 ...

  7. 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台

    版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108597001488193402 来源:腾云阁 h ...

  8. python nose测试框架全面介绍十一---用例的发现

    nose是怎么发现用例的??网上一大把说函数以test开头的都会自动发现,真的是这样吗???还是自己来试验下吧 首先,我们还是来看看官方文档怎么说的吧: If it looks like a test ...

  9. Linux下的awk文本分析命令详解

    一.简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/ ...

  10. CentOS7.X安装LMMP环境Nginx+PHP+Mysql详解

    前言: 作为PHP开发者,我们常用的线上环境就是LNMP,合理的搭建也是必须掌握的技能,下面就利用源码的方式详细介绍下LNMP环境Nginx+PHP+Mysql的详细搭建步骤: 版本说明: Nginx ...