问:Session平滑超时意味着什么? 答:Session平滑超时意味着只要你的页面访问(使用)了Session,超时时间将被刷新(可以理解为重新计时),即从该页面请求开始,将重新计算超时时间。但是,该页面不能禁用Session。它会自动的访问当前页面的Session,刷新超时时间。
问:在global.asax中的事件处理函数中Session为什么无效? 答:依赖于在哪个事件处理函数中使用Session,Session在AcquireRequestState事件之后才有效,该事件之后的所有事件处理函数都可以使用Session,之前的则不能。
问:当我写一个依赖于当前应用的Session的组件时,为什么不能直接使用Session["Key"]获得其值? 答:Session["Key"]实际上是this.Session["Key"],它是作为Page的一个属性提供的,所以在你的组件中不能直接使用这个属性。你可以通过下面的方式使用Session: HttpContext.Current.Session["Key"] = "My Seesion Value";
问:当我使用InProc模式保存Session时,此时的Session是保存在哪里? 答:不同的IIS的处理方式不同, 当使用的是IIS5的时候Session是保存在aspnet_wp.exe的进程空间里的。 当使用的是IIS6时,默认情况下所有的应用程序共享应用程序池,Session保存在w3wp.exe的进程空间中。
问:Session的超时设置是分钟还是秒? 答:是分钟,默认为20分钟。
问:当页面出现错误后我的Session是否将被保存?我需要在Session_End中处理一些清理工作,但是失败了,为什么? 答:Session_End只有在Session运行在InProc模式下才会被执行。Session_End使用的帐号是运行aspnet_wp工作进程的帐号(这个可以在machine.config中设置)。因此,如果在Session_End方法里,使用集成安全性链接到SQL,它将使用aspnet_wp进程的帐号打开链接,此时成功与否则依赖于你的SQL的安全性设置。
问:为什么当我设置cookieless为true是我在重定向的时候会丢失Session? 答:当使用cookieless时,你必须使用相对路径替换程序中的绝对路径,如果使用绝对路径ASP.NET将无法在URL中保存SessionID。 例如:将myDirmySubdirdefault.aspx换成..default.aspx即可。
问:如何将SortedList存储到Session或者Cache里? 答:请参考下面的方法: SortedList x = new SortedList(); x.Add("Key1", "ValueA"); x.Add("Key2", "ValueB"); 保存到Session中: Session["SortedList1"] = x; 使用下面方法获得之: SortedList y = (SortedList) Session["SortedList1"]; Chahe则同理。
问:我为什么会获得这样的错误信息“Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive”? 答:这个问题可能在一个已经安装了Microsoft Visual Studio .NET开发环境的机器上,再安装Window Sharepoint Server(WSS)后出现。 WSS ISAPI过滤器会处理所有的请求。当你通过虚拟目录浏览一个ASP.NET的应用程序时,ISAPI过滤器不会给文件夹目录分配URL。 解决方法是:不要再安装了WSS的机器上使用Session。 详细信息请参考: Session state cannot be used in ASP.NET with Windows SharePoint Services ?scid=kb;en-us;837376
问:如何删除Session变量? 答:想要删除Session变量可以使用HttpSessionState.Remove()方法。
问:是否有办法知道应用程序的Session在运行时占用了多少内存? 答:没有。目前这个值时无法考证的,至少我现在还没有看到这方面的资料。但是可以通过性能监视器以及程序代码大概估算出来一个值。
问:当页面中是否了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么? 答:原因是你的frameset是放在一个htm页面上而不是ASPX页面。 在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。 然而如果你使用Html页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回是并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样这些页面都会产生自己的SessionID,所以在这种情况下就会出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。
问:是否可以将不同应用程序的Session保存在相同的SQL Server服务器的不同数据库上。 答:可以,请参考: FIX: Using one SQL database for all applications for SQL Server session state may cause a bottleneck ?scid=kb;en-us;836680
问:在Session_End是我是否可以获得有效的HttpSessionState和HttpContext对象? 答:你可以在这个方法中获得HttpSessionState对象,可以直接使用Session来访问即可。但是不能获得HttpContext对象,因为该事件并没有和任何请求相关联,因此不存在上下文对象。
问:在SQLServer模式下使用Session,为什么我的Session不过期? 答:在SqlServer模式下,Session的过期是通过SQL Agent的注册工作完成的,请检查你的SQL Agent是否运行?
问:当我设置EnableSessionState为“ReadOnly”后,但是我在InProc模式下依然可以修改Session的值,这是为什么? 答:即使EnableSessionState标示为ReadOnly,但是在InProc模式下用户依然可以编辑Session。唯一不同的是,在请求过程中Session将不会被锁住。
问:我如何才能避免在链接SQL时指定密码? 答:使用信任链接或者使用加密的链接串。有关这方面的详细信息请参考: How To Use the ASP.NET Utility to Encrypt Credentials and Session State Connection Strings ?scid=kb;en-us;329290
问:我在我自己的类中该如何使用Session呢? 答:可以使用HttpContext.Current.Session方式使用,具体方法如下: HttpContext.Current.Session["SessionKey"] = "SessionValue"; 类似的你还可以使用这种方式使用Application对象。
问:为什么在切换成SQLServer模式后我的请求被挂起了? 答:检查在Session里面是否都保存的是可以保存在SQLServer模式下的对象,即这些对象必须支持序列化。
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|