每个人上网可多有过这样的情况,当我们登陆某个网站时,在登陆的旁边会有一个 "记住我" 的复选框,有的网站还会让用户选择记住我。
这个记住我是怎么实现的呢? 其实就用利用的是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中的四种状态保持机制的更多相关文章

  1. css中按钮的四种状态

    css中按钮有四种状态 1. 普通状态2. hover 鼠标悬停状态3. active 点击状态4. focus 取得焦点状态 .btn:focus{outline:0;} 可以去除按钮或a标签点击后 ...

  2. ccs中a链接的四种状态

    什么是超链接? 超链接通俗地指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序.而在一个网页中 ...

  3. >hibernate的四种状态

    hibernate的四种状态 1.临时状态 与数据库中没有相对应的数据,也不在session的管理之中,一般是新new出来的对象 2.持久化状态 对象在session的管理中,最后会在事务提交后,在数 ...

  4. Hibernate的session缓存和对象的四种状态

    一.session缓存 说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了 而hibernate获取一个对象后,会将对象存入s ...

  5. java线程四种状态

    一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可 ...

  6. java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器

    多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要. 1.进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程. 用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是 ...

  7. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

  8. HTML5样式和列表、CSS链接的四种状态

    一.HTML5样式 1.标签: <style>:样式定义: <link>:资源引用: 2.属性: type="text/css":引入文档类型: rel=& ...

  9. ASP.NET MVC中有四种过滤器类型

    在ASP.NET MVC中有四种过滤器类型

随机推荐

  1. freemarker特殊字符转义

    一个坑了很久的问题,今天上午终于在同事帮助下搞定了,,利用ibatis框架,从sqlserver数据库中读取数据,放到java对象中,其中有一项description中有特殊字符,没留意,在ftl文件 ...

  2. mysql 登录远程数据库

    mysql -h${hostIP} -P${hostPort} -u${userName} -p${passwd}

  3. 设计模式学习--Abstarct Factory

    What Abstarct Factory:提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体类. Why Abstarct Factory是创建型设计模式的一种,主要在创建对象时解耦,避免对 ...

  4. day7 七、字符编码,字符字节与文件操作

    一.字符编码 1.定义:人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系) 对应关系形成的结构 ...

  5. Excel相关操作

    public static bool DataSetToExcel(DataSet dataSet, string filePath, bool isShowExcle = true) { DataT ...

  6. PAT甲级1013-1014-1015

    题目:1013 Battle Over Cities 思路:城市数也就1000, 对于每次询问暴力bfs一下看一下有多少连通块就行了.答案就是联通块数减一. #include<stdio.h&g ...

  7. zTree更新自定义标签>>>

    zTree>>>>>>>>>>>>>>>>>>>>>>>> ...

  8. 将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器

    阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级, ...

  9. A little issue in Mathematical Thought from Ancient to Modern Times, Vol. 3

    At P985 of the book, says But there are cuts that are not determined by rational numbers. If we put ...

  10. Django:视图views(三)

    写一下Cookie.重定向.Session Cookie 测试代码,承接前面的代码: 路由: booktest/urls.py urlpatterns = [ url('^$',views.index ...