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中有四种过滤器类型
随机推荐
- AI,大数据,复杂系统 最精 40本大书单
AI,大数据,复杂系统 最精 40本大书单 原创 2017-10-30 Peter 混沌巡洋舰 如果这篇文的题目变成最全书单,那么这篇文会变得又臭又长,这个年代,关于人工智能和大数据的书,没有一万本也 ...
- API(二)之Requests and Responses
这一部分可以让返回的api信息以两种格式呈现:.json和.api REST框架的核心部分.我们来介绍几个基本的组成部分. Request objects REST框架引入了Request对象来扩展常 ...
- css学习_css背景属性及其应用
css背景属性及其应用 1.背景 2.背景简写 3.背景透明(css3) 4.背景缩放(css3) 5.多背景图片(css3) 6.凹凸文字效果
- Entity Framework Core的坑:Skip/Take放在Select之前造成Include的实体全表查询
今天将一个迁移至 ASP.NET Core 的项目放到一台 Linux 服务器上试运行.站点启动后,浏览器打开一个页面一直处于等待状态.接着奇怪的事情发生了,整个 Linux 服务器响应缓慢,ssh命 ...
- 关于ti环境搭建 IAR 为什么IAR不能跳转的真正原因
1.IAR工程莫名其妙的错误,可以通过复制工程文件来解决 2.cc2540环境配置,尽量默认到c盘,以便解决不必要的麻烦,另外,不同的库尽量安装对应的环境文件,比如freertos等环境 3.对于蓝牙 ...
- [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)
vim提供了丰富的快速跳转任意行.任意列的方法,方便高效地移动光标,定位文件位置. 一.Vim行跳转 使用vim查看文件时,使用以下命令可以快速跳转文件首.尾行,方便对整个文件有个全局把握. 1.1 ...
- 20个有趣的Linux命令
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- Java之旅_高级教程_数据结构
摘自:http://www.runoob.com/java/java-data-structures.html 了解即可 Java 数据结构 Java 工具包提供了强大的数据结构.在Java中的数据结 ...
- Python 常用的日期时间命令
今天用到自动添加当前时间,居然把之前的知识忘了,特整理常用的日期时间命令 代码: # 获取当前时间# import time# localtime = time.localtime(time.time ...
- Bloom Filter 数据结构去重
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合. Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于 ...