关于Session丢失原因的分析

http://xue8.net 2006-10-4 16:25 来源:学吧
文章来自于【学吧】http://xue8.net/program/view.asp?ArticleID=1190
  很多session丢失的原因是因为错误的程序或者是错误的虚拟目录结构。
  SessionID的改变有下面几个原因:
  
  原因一:
  Netscape的浏览器会认为"/App/user.asp"跟"/app/user.asp"是两个不同的程序。它会自动地开始一个新的会话期(newsession)。所以,才你的网站上一定要统一字母的大小写。
  
  原因二:
  另外一个是原因是Session.Timeout的值。
  Timeout这个属性是用来设置Session的超时时间的,一分钟为单位。假如一个用户,在一个Timeout的时间内没有刷新或者请求页面,那么会话就会结束(thesessionends)。当你再次请求页面的时候,一个新的会话有会开始。
  确信Timeout的值,是分钟的。
  格式:Session.Timeout[=nMinutes]
  
  原因三:
  假如用户把他们的浏览器的cookie关了,当然session就不能保持。因为session的保持是要靠cookie的。
  要保持Session的状态,浏览器就必须支持cookie,而且在打开的状态。你当然可以用其他的方法
  
  原因四:
  常犯的错误就是,建立了错误的目录结构。
  像下面的目录结构:
  root放了global.asa
  \virtual_root没有global.asa
  \another_virtual_root没有global.asa
  调用两个virtualroots的页面,就会执行相同的global.asa(root上的那个)
  
  另外的一个目录结构:
  root没有global.asa
  \virtual放了global.asa
  \another_virtual_root另外一个global.asa
  
  每一个不同目录下的global.asa都会各自执行,当然执行的代码就不同了。不过如果里面的代码一样,就令当别说。:)
  所以你在请求不同目录下页面,将会导致不同的global.asa被执行。不同的变量被调用,不同的sessionid被建立....之前的有用的信息都被破坏了。
  
  下面是详细的解释:
  当你先浏览子虚拟程序上的页面(childvirtualapplication),然后再去浏览子虚拟程序的上一级的父虚拟程序(parentvirtualroot)的页面。那些变量就会丢失、破坏。看下面的表格:
1 2

发表评论

用户名:
密 码:
匿名评论
请发表评论时遵纪守法并注意语言文明!
验证码:
用户名
评论内容
目前尚无评论!