ASP.NET SESSION使用和原理

分类: asp.net   出处:iocblog整理  更新时间:2009-09-14   添加到收藏  


  session 的 管理,我们传统的asp 程序其实是一种 dead 的session 联结,系统其实在我们的客户端书写了一个cookie,当我们把我们浏览器的 安全设置中的 cookie 设置成 prompt 的时候,当我们访问一个有session 的页面的时候,就会出现一个是否允许cookie 的提示,当设置成为 不允许 cookie 的时候,我们的session 总是不能成功.例如:
  
  <%
  session("username")="iocblog"
  session("url")="http://www.iocblog.net"
  %>
  
  在asp.net 的环境中,session 被完全的重新进行了定义,由于豆腐现在的asp.net 的环境是pdc 版本的,所以,没有对beta1 版本进行demo,我在这里如果涉及到 beta1 的内容,都是仅仅是材料上介绍的,没有经过豆腐的测试
  (来源www.iocblog.net)
  其实,对于一些不愿意深究的同志们,豆腐 说:其实 asp.net 的使用方法和asp 的使用方法完全相同,甚至更为简单,因为 根据豆腐 的观察,我们根本不用继续 去考虑 客户端 的 cookie 选项 的状态,因为不管客户端的设置如何,session都可以顺利的传递
  
  下面我们就对 asp.net 的 session 机制进行一些简单的深入了解,限于技术,我有的问题也不是很清楚,所以欢迎大家一同来探讨 这个 文章
  
  在pdc 版本中,我们打开 %systemroot%complus(version)config.web 文件,我们找到 sessionstate可以看到以前的内容:
  
  <sessionstate
  inproc="true"
  usesqlserver="false"
  cookieless="false"
  timeout="20"
  server="localhost"
  port="42424"
  />
  
  当 inproc 为true 的时候,asp.net 将采取一种称为 in-process 的机制,将session 的数据保存在这一台服务器上,如果inproc 和 usesqlserver 同时为 false ,则采取一种 out process 的机制,将session 存储在 一台 专门用来保存session 的服务器上,这样就可以解决当访问 一个站点的 不同主机的时候,session 的共享,这个以前在 asp 中绝对是不可能的.在 beta1 的版本上 config.web 改变了很多,我们简单的看一下:
  <!-- sessionstate attributes:
  mode = "inproc" | "sqlserver" | "stateserver"
  cookieless = "true" | "false"
  timeout = <session timeout in minutes, a whole number greater than 0>
  sqlconnectionstring = <acceptable values for sqlconnection.connectionstring,
  only used when mode="sqlserver">
  server = <server name, only used when mode="stateserver">
  port = <port number, only used when mode="stateserver">
  -->
  关于 config.web 文件的session 部分我们就先说到这里,下面我们来看看 cookieless 的问题:
  这个cookieless 不是我们平常理解的是否在 客户端 保存cookie 根据豆腐的观察,asp.net 的session
  是不会在 浏览器客户端生成任何的cookie的
  我们首先把 cookieless 设置成为 false 的时候,我们来看看这个程序
  <%@ page language="vb" %>
  <%session("name")="豆腐"%>
  <%=session("name")%>
  
  程序执行结束后,我们没有从浏览器得到任何的 提示,虽然我们也使用到了session当我们 把 cookieless 设置成为 true 以后,再次运行这个程序,我们发现 程序仍然是正确的执行,但是浏览器的地址栏发生了一些变化,我们以前是
  
  http://host/testsession.aspx 现在变成了 http://host/(包含有很多字符串的内容)/testsession.aspx豆腐估计这是 因为 这个session 甚至在 服务器上也没有 生成cookie 的原因,只好用 (包含有很多字符串的内容)的内容来保存session的内容了
  
  当我们将 inproc 和 usesqlserver 都设置成为 false 表示我们将使用 out process 这个时候,我们就要指定server 的name 这个server 就是同意保存 session 的 服务器,我们需要在这个 服务器上 将asp state 的服务启动
  
  当我们需要使用 sql server 的时候,我们必须填写 sql server 的连接字符串,这样 session 就会被保存到sql server 的一个database ,当然这个database 是要生成的,,不过在 pdc 版本中,我没有找到这个database 的安装文件。(来源www.iocblog.net)


Tag: Session ,cookie



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。