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中有四种过滤器类型
随机推荐
- LeetCode_7.Reverse Integer
问题 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Ex ...
- [No000010F]Git8/9-使用GitHub
我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人 ...
- [No0000CB]如何在命令行(cmd)通过TCP/IP端口(port)查询所在的进程号(pid)或进程名称,并终止该进程
1)首先查找占用某个端口的进程PID netstat -ano | findstr [port] 2)根据该进程pid查询进程名称或标题,确认那个程序在占用该端口 tasklist /v | fi ...
- 在ubuntu系统中,python依赖存放的路径
你在使用python,之后你想给python安装一些第三方库,如tensorflow或者tensorrt,那么这些包存放在哪个路径下呢? 该目录下: /usr/local/lib/python3.5/ ...
- React 入门实例
React 入门实例教程 一.安装 React 的安装包,可以到官网下载. $ git clone git@github.com:ruanyf/react-demos.git 如果你没安装 git, ...
- python3读取excel数据
import xlrd worksheet = xlrd.open_workbook('XXXX.xlsx') #打开excel文件 sheet_names= worksheet.sheet_na ...
- extundelete fuser
[extundelete ] fuser -mv /dev/sda6 https://blog.csdn.net/xwl145/article/details/38896699 多列排序[sort]h ...
- 查找->动态查找表->哈希表
文字描述 哈希表定义 在前面讨论的各种查找算法中,都是建立在“比较”的基础上.记录的关键字和记录在结构中的相对位置不存在确定的关系,查找的效率依赖于查找过程中所进行的比较次数.而理想的情况是希望不经过 ...
- 知乎改版api接口之scrapy自动登陆
最近使用scrapy模拟登陆知乎,发现所有接口都发生变化了,包括验证码也发生了很大变化,通过抓包分析,记录下改版后的知乎模拟登陆,废话不多说,直接上代码,亲测有效 # -*- coding: utf- ...
- Java+Selenium 如何处理Try/Catch
场景:为了检查数据是否存在,如果存在就把数据删除,不存在则新增保存.因为我们需要做下数据初始化准备工作. 一.:Feature 示例: Scenario: E-251:维护薪资帐套明细 When I ...