积极答复者
如何在类中使用Session

问题
-
我使用Jquery的ajax方法进行ajax访问,使用httpHandlers拦截请求到指定类进行处理:
public void CheckValidateCode(object parm) { object validatecode = HttpContext.Current.Session["Code"]; string result = "0"; if (validatecode != null) { string[] parms = (string[])parm; if (validatecode.ToString() == parms[0]) { result = "1"; } } HttpContext.Current.Response.Write(result); }
然而这里的HttpContext.Current.Session为null,抛出错误未将对象引用到实例,
然后我这样做:
public class ValidateCode : System.Web.SessionState.IRequiresSessionState { public void CheckValidateCode(object parm) { object validatecode = HttpContext.Current.Session["validateCode"]; string result = "0"; if (validatecode != null) { string[] parms = (string[])parm; if (validatecode.ToString() == parms[0]) { result = "1"; } } HttpContext.Current.Response.Write(result); } }
仍然Session为null。
后来再这样改:
public class ValidateCode :System.Web.UI.Page { public void CheckValidateCode(object parm) { object validatecode = HttpContext.Current.Session["validateCode"]; string result = "0"; if (validatecode != null) { string[] parms = (string[])parm; if (validatecode.ToString() == parms[0]) { result = "1"; } } HttpContext.Current.Response.Write(result); } }
仍然为null。请问怎样才能在类中访问Session呢?
Web.Config配置为:
<sessionState mode="InProc" timeout="20"></sessionState>
郭鹏
答案
全部回复
-
我写了一个简单的测试demo。如下:
页面:
<script type="text/javascript"> function mymethod() { $.ajax({ type: "get", url: "AsynchronousRequest.axd", cache: false, data: { action: 'Class1/myTest', parms:'abc' }, success: function(result) { alert(result); } }); } </script> <body> <form id="form1" runat="server"> <img src="WebForm1.aspx" /> <div> <input type="button" value="button" onclick="mymethod()" /> </div> </form> </body>
WebForm1.aspx页面:
protected void Page_Load(object sender, EventArgs e) { Session["aa"] = "Hello World"; }
web.config:
<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> <add verb="*" path="AsynchronousRequest.axd" type="SinoSpace.PL.Access.SinoSpaceHandler,ClassLibrary1"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>
SinoSpaceHandler.cs:
class SinoSpaceHandler : IHttpHandler { #region IHttpHandler 成员 public bool IsReusable { get { return true; } } public void ProcessRequest(HttpContext context) { try { string action = string.Empty; string parm = string.Empty; action = (context.Request["action"] == null) ? "" : context.Request["action"]; parm = (context.Request["parms"] == null) ? "" : context.Request["parms"]; string[] actions = (action != "") ? action.Split('/') : null; string[] parms = (parm != "") ? parm.Split(',') : null; string _nameSpace = "SinoSpace.PL.Access.Process."; string _class = actions[0]; string _method = actions[1]; Type type = Type.GetType(_nameSpace + _class); object instance = Activator.CreateInstance(type); MethodInfo methodInfo = Type.GetType(instance.ToString()).GetMethod(_method); methodInfo.Invoke(instance, (parms == null) ? null : new object[] { (object)parms }); } catch (Exception e) { } } #endregion }
Class1.cs:
public class Class1 : System.Web.SessionState.IRequiresSessionState { public void myTest(object parm) { HttpContext.Current.Response.Write(HttpContext.Current.Session["aa"]); } }
HttpContext.Current.Session 为null。请帮我看下我哪里有错,谢谢了
郭鹏