linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
在asp.net中使用session常见问题集锦
[ 作者:  加入时间:2007-11-13 13:46:02  来自:Linux联盟收集整理 ]

问:为什么Session在有些机器上偶尔会丢失? DRvLinux联盟
  答:可能和机器的环境有关系,比如:防火墙或者杀毒软件等,尝试关闭防火墙。 DRvLinux联盟
   DRvLinux联盟
  问:为什么当调用Session.Abandon时并没有激发Session_End方法? DRvLinux联盟
  答:首先Session_End方法只支持InProc(进程内的)类型的Session。其次要激发Session_End方法,必须存在Session(即系统中已经使用Session了),并且至少要完成一次请求(在这次请求中会调用该方法)。 DRvLinux联盟
   DRvLinux联盟
  问:为什么当我在InProc模式下使用Session会经常丢失? DRvLinux联盟
  答:该问题通常是由于应用程序被回收导致的,因为当使用进程内Session时,Session是保存在aspnet_wp进程中,当该进程被回收Session自然也就没有了,确定该进程是否被回收可以通过查看系统的事件查看器获得信息。 DRvLinux联盟
   具体信息请参考: DRvLinux联盟
   Session variables are lost intermittently in ASP.NET applications DRvLinux联盟
   http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148 DRvLinux联盟
   在1.0的时候也有一个bug会导致工作进程被回收并重启,该bug已经在1.1和sp2中修复。 DRvLinux联盟
   关于该bug的详细信息请参考: DRvLinux联盟
   ASP.NET Worker Process (Aspnet_wp.exe) Is Recycled Unexpectedly. DRvLinux联盟
   http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792 DRvLinux联盟
   DRvLinux联盟
  问:为什么当Session超时或者Abandoned后,新Session的ID和原来的相同? DRvLinux联盟
  答:因为SessionID是保存在客户端浏览器的实例里,当Session超时在服务器重新建立Session时,将使用浏览器传来的SessionID,所以当Session超时后,再重新建立后SessionID并不变。 DRvLinux联盟
   DRvLinux联盟
  问:为什么每次请求的SessionID都不相同? DRvLinux联盟
  答:该问题可能是没有在Session里面保存任何信息引起的,即程序中任何地方都没有使用Session。当Session中保存信息之后SessionID将一直和浏览器相关,此时的SessionID将不会在变化。 DRvLinux联盟
   DRvLinux联盟
  问:ASP和ASP.NET之间是否可以共享Session? DRvLinux联盟
  答:可以。但是这是一个比较复杂的过程,微软提供了官方的解决方案,请参考:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ConvertToASPNET.asp DRvLinux联盟
   DRvLinux联盟
  问:什么类型的对象可以保存在Session里? DRvLinux联盟
  答:这依赖使用的Session的模式,当使用的是进程内(InProc)的Session那么可以轻松的保存任何对象。如果你使用了非InProc的模式,则只能保存可以序列化和反序列化的对象,如果此时保存的对象不支持序列化,则不能保存到这种模式(非InProc)的Session里。 DRvLinux联盟
   DRvLinux联盟
  问:为什么在Session_End中不能使用Response.Redirect和Server.Transfer方法跳转页 DRvLinux联盟
面? DRvLinux联盟
  答:Session_End是一个在服务器内部激发的事件处理函数。它是基于一个服务器内部的计时器的,在激发该事件时服务器上并没有相关的HttpRequest对象,因此此时并不能使用Response.Redirect和Server.Transfer方法。 DRvLinux联盟
   DRvLinux联盟
  问:在Session_End中是否可以获得HttpContext对象? DRvLinux联盟
  答:不行,因为这个事件并没有和任何的请求(Request)相关联,没有基于请求的上下文。 DRvLinux联盟
   DRvLinux联盟
  问:在Web Service中该如何使用Session? DRvLinux联盟
  答:为了在Web Service中使用Session,需要在Web Service的调用方做一些额外的工作,必须保存和存储调用Web Service时使用的Cookie。详细信息请参考MSDN文档的HttpWebClientProtocol.CookieContainer属性。然而,如果你使用代理服务器访问Web Service由于框架的限制,两者不能共享Session。 DRvLinux联盟
   DRvLinux联盟
  问:在自定义自己的HttpHandler的时候,为什么不能使用Session? DRvLinux联盟
  答:在实现自己的HttpHandler的时候,如果希望使用Session必须实现下面的两个标记接口中的一个:IRequiresSessionState和IReadOnlySessionState,这些接口没有任何方法需要实现,只是一个标记接口和使用INamingContainer接口的方法一样。 DRvLinux联盟
   DRvLinux联盟
  问:当我使用webfarm时,当我重定向到其他的Web服务器时Session为什么会丢失? DRvLinux联盟
  答:详细信息请参考: DRvLinux联盟
   PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode DRvLinux联盟
   http://support.microsoft.com/default.aspx?scid=kb;en-us;325056 DRvLinux联盟
   DRvLinux联盟
  问:为什么我的Session在Application_OnAcquireRequestState方法中无效? DRvLinux联盟
  答:Session只有在HttpApplication.AcquireRequestState事件调用以后才会有效。 DRvLinux联盟
   详细信息请参考: DRvLinux联盟
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp DRvLinux联盟
   DRvLinux联盟
  问:如果使用了cookieless,我该如何从HTTP页面定向到HTTPS? DRvLinux联盟
  答:请尝试下面的方法: DRvLinux联盟
   String originalUrl = "/fxtest3/sub/foo2.aspx"; DRvLinux联盟
   String modifiedUrl = "https://localhost" + Response.ApplyAppPathModifier(originalUrl); DRvLinux联盟
   Response.Redirect(modifiedUrl); DRvLinux联盟
   DRvLinux联盟
  问:Session在global.asax中的那些事件中有效? DRvLinux联盟
  答:Session只有在AcquireRequestState事件之后有效,该事件之后的事件都可以使用Session。 DRvLinux联盟
   DRvLinux联盟
   DRvLinux联盟
  问:如何获得当前Session中保存的所有对象? DRvLinux联盟
  答:可以通过遍历所有的Session.Keys来获得。代码如下: DRvLinux联盟
  ArrayList sessionCollection = new ArrayList(); DRvLinux联盟
  foreach (string strKey in Session.Keys){ DRvLinux联盟
   sessio DRvLinux联盟
nCollection.Add(Session[strKey]); DRvLinux联盟
  } DRvLinux联盟
   DRvLinux联盟
  问:是否可以在不同的应用程序中共享Session? DRvLinux联盟
  答:不能直接共享。可以参考如何在ASP和ASP.NET之间共享Session。 DRvLinux联盟
   DRvLinux联盟
  问:Session.Abandon和Session.Clear有何不同? DRvLinux联盟
  答:主要的不同之处在于当使用Session.Abandon时,会调用Session_End方法(InProc模式下)。当下一个请求到来时将激发Session_Start方法。而Session.Clear只是清除Session中的所有数据并不会中止该Session,因此也不会调用那些方法。 DRvLinux联盟
   DRvLinux联盟
  问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制? DRvLinux联盟
  答:Session实现了Reader/Writer的锁机制: DRvLinux联盟
   当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。 DRvLinux联盟
   当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。 DRvLinux联盟
   读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。 DRvLinux联盟
   DRvLinux联盟
  问:Session平滑超时意味着什么? DRvLinux联盟
  答:Session平滑超时意味着只要你的页面访问(使用)了Session,超时时间将被刷新(可以理解为重新计时),即从该页面请求开始,将重新计算超时时间。但是,该页面不能禁用Session。它会自动的访问当前页面的Session,刷新超时时间。 DRvLinux联盟
   DRvLinux联盟
  问:在global.asax中的事件处理函数中Session为什么无效? DRvLinux联盟
  答:依赖于在哪个事件处理函数中使用Session,Session在AcquireRequestState事件之后才有效,该事件之后的所有事件处理函数都可以使用Session,之前的则不能。 DRvLinux联盟
   DRvLinux联盟
  问:当我写一个依赖于当前应用的Session的组件时,为什么不能直接使用Session["Key"]获得其值? DRvLinux联盟
  答:Session["Key"]实际上是this.Session["Key"],它是作为Page的一个属性提供的,所以在你的组件中不能直接使用这个属性。你可以通过下面的方式使用Session: DRvLinux联盟
   HttpContext.Current.Session["Key"] = "My Seesion Value"; DRvLinux联盟
   DRvLinux联盟
  问:当我使用InProc模式保存Session时,此时的Session是保存在哪里? DRvLinux联盟
  答:不同的IIS的处理方式不同, DRvLinux联盟
   当使用的是IIS5的时候Session是保存在aspnet_wp.exe的进程空间里的。 DRvLinux联盟
   当使用的是IIS6时,默认情况下所有的应用程序共享应用程序池,Session保存在w3wp.exe的进程空间中。 DRvLinux联盟
   DRvLinux联盟
  问:Session的超时设置是分钟还是秒? DRvLinux联盟
  答:是分钟,默认为20分钟。 DRvLinux联盟
DRvLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论

分页:[1] 2
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux 中软件 RAID 使用常见问题解决  (2007-11-13 11:01:45)
 ·认识asp.net会话状态  (2007-11-12 16:47:36)
 ·ASP.NET AJAX 客户端生命周期事件3  (2007-11-12 16:44:09)
 ·ASP.NET AJAX 客户端生命周期事件2  (2007-11-12 16:41:31)
 ·ASP.NET AJAX 客户端生命周期事件1  (2007-11-12 16:40:37)
 ·利用AJAX和ASP.NET实现简单聊天室  (2007-11-12 16:39:55)
 ·ASP.NET2.0 WebRource,开发微调按钮控件  (2007-11-02 13:54:47)
 ·Linux下的Asp.Net配置指南  (2007-11-02 13:46:11)
 ·在 Linux 下运行 ASP.NET 2.0  (2007-11-02 13:44:00)
 ·asp.net 客户端回调功能的实现机制探讨  (2007-11-02 13:40:41)