在asp.net中使用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 http://support.microsoft.com/default.aspx?scid=kb;en-us;837376 问:如何删除Session变量? 答:想要删除Session变量可以使用HttpSessionState.Remove()方法。 问:是否有办法知道应用程序的Session在运行时占用了多少内存? 答:没有。目前这个值时无法考证的,至少我现在还没有看到这方面的资料。但是可以通过性能监视器以及程序代码大概估算出来一个值。 问:当页面中是否了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么? 答:原因是你的frameset是放在一个htm页面上而不是ASPX页面。 在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID 问:是否可以将不同应用程序的Session保存在相同的SQL Server服务器的不同数据库上。 答:可以,请参考: FIX: Using one SQL database for all applications for SQL Server session state may cause a bottleneck http://support.microsoft.com/default.aspx?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 http://support.microsoft.com/default.aspx?scid=kb;en-us;329290 问:我在我自己的类中该如何使用Session呢? 答:可以使用HttpContext.Current.Session方式使用,具体方法如下: HttpContext.Current.Session["SessionKey"] = "SessionValue"; 类似的你还可以使用这种方式使用Application对象。 问:为什么在切换成SQLServer模式后我的请求被挂起了? 答:检查在Session里面是否都保存的是可以保存在SQLServer模式下的对象,即这些对象必须支持序列化。 问:当Session设置成cookieless后会有什么影响? 答:当把cookieless设置成true时,主要会有下面的约束: 1、在页面中不能使用绝对链接 2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。 如果发送一个链接给其他人,此时的URL里面将包含Session ID的信息,所以两个人将公用一个Session。 问:是否可以将Session保存在数据库中? 答:当然可以,详细信息请参考:http://support.microsoft.com/default.aspx?scid=kb;en-us;311209 问:为什么当我在InProc模式下使用Session会经常丢失? 补充一种情况:如果使用Access数据库,为了防止数据库被下载,有人可能会想到会把数据库文件放到bin目录下,这样数据库就不能被下载了,但是如果在InProc模式下,这样也会导致Session丢失。因为当访问应用程序的时候,肯定会经常向数据库中写数据,这样就导致了放在bin目录下面数据库文件的变化,而bin目录被修改会导致session丢失。 要解决此问题,可以更换数据库文件的存放路径,或者使用StateServer或者SqlServer模式 PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode http://support.microsoft.com/default.aspx?scid=kb;en-us;324772 Asp.net中多项目共享Session 选择自 dnyz 的 Blog http://dev.csdn.net/article/21/21714.shtm 1. 建立一个空白解决方案blank solution,如:d:MyProjectMyProject.sln 2. 在d:MyProject下建一个Web Application的根目录d:MyProjectWebMis并设为http://localhost/WebMis的虚拟目录 3. 在WebMis目录下根据模块分别新建目录,如:d:MyProjectWebMisLogin和d:MyProjectWebMisCheckOut 4. 在VS.net中根据模块新建web application,如:http://localhost/WebMis/Login和http://localhost/WebMis/CheckOut 5. 新建后Login和CheckOut两个目录自动被设置为虚拟目录 6. 在WebMis项目中添加Login和CheckOut的项目引用 7.在IIS管理器中删除Login和CheckOut的虚拟目录 8. 删除各项目的global.asax(除根项目) 9. 除去个项目的web.config(除根项目)中的如下代码: <authentication mode="Windows" /> <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" /> 或删掉web.config(若不需要在各目录中进行配置) 10. 编译后,即可运行 源代码网供稿. |
