ASP.Net中的四种状态保持机制
每个人上网可多有过这样的情况,当我们登陆某个网站时,在登陆的旁边会有一个 "记住我" 的复选框,有的网站还会让用户选择记住我。
这个记住我是怎么实现的呢? 其实就用利用的是cookie 当我们选择了"记住我"以后,浏览器会将用户名保存在浏览器的cookie中。我们下次登陆的时候,就会自动的去找cookie了
当我们登陆网站以后,在最上面会显示 "欢迎您***" 这也是一种状态,这个是怎么实现的呢?
这个就利用到了Session。Session是将我们登陆的用户名等信息存在服务器的内存中,这样我们就能在这个网站的任何一个页面中使用了 。
Session
什么是Session
是保存在服务端的一种状态,可以保存任何类型的对象。
可以存储用户的信息(用户名 密码等)。
只要在一个页面中创建了Session,并给Session赋值了,那么在整个网站都可以使用。
这一点和ViewState不一样。ViewState是在当前页创建了以后,只能在当前页的任何一个地方使用。
Session没有限制存储的大小,但是不建议存储大的数据,这样是为了减轻服务器压力。
(在网站中不要大量使用Session)
Session过期问题:
session的过期时间是从session不活动的时候开始计算,如果session一直活动,session就总不会过期,从该Session未被访问,开始计时; 一旦Session被访问,计时清0;Session的默认失效时间是30分钟,
Session销毁:
Session.Abandon();//销毁服务器端的Session对象
Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁
Session原理:
1. 浏览器先向服务器请求页面,并返回给浏览器 显示页面空间
2. 点击提交(发送post请求) 服务器发现有session代码 这个时候 开始在服务器内存中创建session
3. 在服务器内存中 有一个叫session缓冲池的地方 专门用来存储session
这个时候 (先检查session池中有没有当前浏览器的session对象 如果没有的话 才会在session池中创建对象)
4. 有一个重定向Response.Redirect() 此时 Location要跳转的页面返回 和 将SessionID以cookie的形式返回给浏览器 (在set-cookie中存放的返回的sessionId)
5. 返回浏览器以后 浏览器带着刚刚传过去的sessionID 以cookie的形式 再次回到服务器端 回到重定向的那个页面
6. 然后 根据传过去的sessionId在session池中查找对应的session值
Session设置超时时间:
在服务器端 session如果不操作 默认保存20分钟 如果想修改 可以设置
Session.Timeout=60; // 60是分钟
使用session注意的地方:
在一般处理程序中使用session 必须实现
IRequiresSessionState 接口
这个接口是一个标示接口 里面有任何方法 因为在请求管道的第九个时间中要根据sessionId去session池中找对应的值 要先判断时候实现了这个接口 所以 使用一般处理程序的时候 必须继承
在一般处理程序中创建session
HttpContext.Current.Session["name"] = name;
在aspx文件中不用添加 应为defalt类中继承了这个接口
Ccokie
什么是Ccokie:
Cookie服务器向浏览器写出的 然后浏览器保存起来 下次浏览器访问当前网站的时候 浏览器不经过服务器同意 自动的将cookie读出来 发送给服务器
Cookie的path属性:
如果给path属性赋值=“WebForm/amin” 那么 只有访问admin目录下的这个页面的时候才把cookie从服务器写到浏览器中 默认选择的根目录 就是访问哪个页面也会将cookie从服务器写到浏览器
Cookie原理:
1. 浏览器先向服务器请求页面 并返回给浏览器 显示页面控件(前提是页面上必须有创建cookie的代码)
2. 当浏览器向服务器发出post请求以后 服务器发现所请求的页面带有cookie的代码 然后 服务器在响应报文中的响应体中包含的cookie的创建信息(set_cookie…….. 如果为cookie设置的过期时间 那么 还包含过期时间信息)
3. 返回浏览器以后 根据响应报文 创建cookie (没有设置时间就创建在浏览器内存中 设置了就创建在浏览的对应的磁盘中)
4. 此后 浏览器每次访问该网站的页面时 都会带的cookie信息 一起访问
Cookie保存的两种方式:
1. 浏览器内存 当我们没有为cookie设置保存时间的时候 cookie就被保存在当前浏览器内存中关闭浏览器以后 cookie也就不存在了
2. 浏览器所指定为本次磁盘中 当我们为cookie设置了保存时间以后 cookie就保存在了当前浏览器的指定目录中知道所设定的时间到期以后 cookie会自动销毁(即使设定了1秒也会保存在本次磁盘中)
ViewState(ASP.Net中特有的)
什么是 View State:
ASP.NET 的 .aspx页面特有,页面级的;
就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式 View State是.net中特有的
使用View State:(View State必须借助与一个隐藏域提交表单)
在使用是 必须是服务端控件 (必须在form中添加 runat=sever)
// 创建一个 View State 并赋值
ViewState["value"] = 123;
View State运行原理:
1. 客户端想服务端请求一个带有View State[value]的页面
2. 当服务端检测到带有View State[value]时 客户端返回时 会将名称叫value(value的自定义的)的View State的值保存到__VIEWSTATE中(在页面的生命周期中 通过SavaState事件中的SavaAllState方法 将View State[value]值经过base64编码等序列化操作 最后才保存到__VIEWSTATE的value中)
3. 当点击提交时 会将__VIEWSTATE这个隐藏域提交到服务端(在页面的生命周期中 通过LoadState事件中的LoadAllState方法 将__VIEWSTATE的值 经过base64反编码操作以后 重新赋给View State[value] )
4. 服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含__VIEWSTATE的隐藏域,如果有,则将中间的值解码后添加到页面的ViewState属性中。
5. 服务器在输出的时候,也会自动的将ViewState中的值添加到表单里名叫__VIEWSTATE的隐藏域中。
View State其他:
1. View State适用于在同一个页面 不关闭的情况下多次与服务器交互
禁用View State以后(EnableViewState="false") text等表单控件不受影响 div、span等显示标签受影响
因为text等都是表单标签 不管禁用不禁用都会提交
而div、span的标签不是表单元素 如果没有View State产生的隐藏域保存它的值 它是不会提交到服务端的
Application
Application对象可以存储应用程序级的数据。
“Application”:应用程序
第一个用户访问站点时,应用程序启动,并创建一个Application对象。
创建成功后,整个应用程序中都可以使用该对象。
除非应用程序关闭,否则对象一直存储在内存中。
他和session一样 也是保存在服务器内存中的 唯一不同的是 所有的用户都能使用他 他是公共的 不像session那样为每一用户都分配一个session 所有 可以用Application统计某个站点的访问量
ASP.Net中的四种状态保持机制的更多相关文章
- css中按钮的四种状态
css中按钮有四种状态 1. 普通状态2. hover 鼠标悬停状态3. active 点击状态4. focus 取得焦点状态 .btn:focus{outline:0;} 可以去除按钮或a标签点击后 ...
- ccs中a链接的四种状态
什么是超链接? 超链接通俗地指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序.而在一个网页中 ...
- >hibernate的四种状态
hibernate的四种状态 1.临时状态 与数据库中没有相对应的数据,也不在session的管理之中,一般是新new出来的对象 2.持久化状态 对象在session的管理中,最后会在事务提交后,在数 ...
- Hibernate的session缓存和对象的四种状态
一.session缓存 说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了 而hibernate获取一个对象后,会将对象存入s ...
- java线程四种状态
一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可 ...
- java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要. 1.进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程. 用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是 ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- HTML5样式和列表、CSS链接的四种状态
一.HTML5样式 1.标签: <style>:样式定义: <link>:资源引用: 2.属性: type="text/css":引入文档类型: rel=& ...
- ASP.NET MVC中有四种过滤器类型
在ASP.NET MVC中有四种过滤器类型
随机推荐
- java注解和反射学习
spring框架很多地方都应用了注解,如@controller,所以要学会自定义注解及注解处理器. Class<?> cl=Class.froName(className) //通过类名加 ...
- Centos下磁盘管理---分区
1.磁盘分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a—z ...
- background-color没有none值
在工作中发现, 这样是没反应的, 要写这个样式才能去掉背景颜色(background-color:transparent;)
- juqery 判断所有input 不能为空 判断只能为数字 判断身份证号:18位和15位 判断是否银行卡号
//jq 判断某字符串是否含有特殊符号 function CheckNum() { //定义数组保存特殊字符 var AllNumIsSame = new Array("’", & ...
- Fis3构建迁移Webpack之路
Webpack从2015年9月第一个版本横空初始至今已逾2载.它的出现,颠覆了一大批主流构建如Ant.Grunt和Gulp等等.腾讯NOW直播IVWEB团队之前一直采用Fis构建,本篇文章主要介绍从F ...
- vue项目打包后一片空白及资源引入的路径报错解决办法
网上很多说自己的VUE项目通过Webpack打包生成的list文件,放到HBulider打包后,通过手机打开一片空白.这个主要原因是路径的问题. 1.记得改一下config下面的index.js中bu ...
- 闭区间套定理(Nested intervals theorem)讲解2
①确界与极限,看完这篇你才能明白 http://www.cnblogs.com/iMath/p/6265001.html ②这个批注由这个问题而来 表示$c$可能在$\bigcap_{n=1}^{\i ...
- linux使用rz、sz快速上传、下载文件
平时都使用ftp工具进行文件的上传下载操作,针对于小文件的简单传输来说,有下面好的方法: 首先安装rz.sz工具: #yum install lrzsz 上传文件:rz 下载文件:sz 上传文件在sh ...
- Flink – CEP NFA
看看Flink cep如何将pattern转换为NFA? 当来了一条event,如果在NFA中执行的? 前面的链路,CEP –> PatternStream –> select –> ...
- LeetCode 852 Peak Index in a Mountain Array 解题报告
题目要求 Let's call an array A a mountain if the following properties hold: A.length >= 3 There exist ...