我有一个自定义MembershipProvider,我在ASP.NET 2.0应用程序中使用。在扩展成员资格提供程序的类中,我有一个名为AttemptLogin()
的函数,如果用户有效,它会设置会话变量。在该函数内部,有许多会话变量赋值,类似于以下内容:
HttpContext.Current.Session["id"] = "12345";
global.asax中的AttemptLogin()
函数正在调用 Application_BeginRequest
。当我在visual studio中打开它时,此代码工作正常,然后通过单击“开始调试”在内置开发服务器中运行它。但是,当我将它部署到我们的测试服务器(在32位模式下运行IIS的Windows 2003 Server 64位)时,执行在到达上面的代码时会中断,从而给出以下消息:
[NullReferenceException: Object reference not set to an instance of an object.] CustomMembershipProvider.AttemptLogin() in c:\Inetpub\wwwroot\Josh\App_Code\CustomMembershipProvider.cs:1097 ASP.global_asax.Application_BeginRequest(Object sender, EventArgs e) in c:\Inetpub\wwwroot\Josh\Global.asax:14 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
如何在这种情况下成功访问会话状态?为什么它在本地工作而不在服务器上工作?
答案 0 :(得分:1)
在Application_BeginRequest中无法使用会话变量你应该通过处理global.asax中的Application_AcquireRequestState来查看管道中的后续内容,我真的很困惑为什么你的dev框没有得到空引用
答案 1 :(得分:0)
检查服务器上的web.config文件,确保启用了sessionState模式
<sessionState mode="InProc" />