如何在ashx页面获取Session值(未将对象引用设置到对象的实例)

在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下:

HttpRequest Request = context.Request;

HttpResponse Response = context.Response;


但是要得到 Session的值就没有那么简单了。比如你要在ashx得到保存在Session中的登录帐号Session["userAccount"]

如果你只是context.Session["userAccount"]的话是会报 “未将对象引用设置到对象的实例”的异常

所以,如果要想取Session中的值 ,需要如下所示

1、引入 命名空间:

using System.Web.SessionState;

using System.Web.SessionState;

2、实现IRequiresSessionState接口,具体如下  

 

    /// <summary>
    /// $codebehindclassname$ 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class AddUserInfo : IHttpHandler,IRequiresSessionState //就是这样显示的实现一下,不用实现什么方法
    {

        public void ProcessRequest(HttpContext context)
        {

      //这样你就可以如下 操作了

                  if(context.Session["userAccount"] != null)

     {

       string account = context.Session["userAccount"].ToString();

     }

      //...继续下面的代码

    }

  }

}



### 如何在 ASP.NET 的 .ashx 文件中设置获取 Session 为了能够在 `.ashx` 文件中操作 `Session` ,可以通过实现 `IRequiresSessionState` 或者 `IReadOnlySessionState` 接口来完成这一目标。这两个接口分别提供了对 `Session` 的读写权限以及只读权限的支持。 #### 实现 IRequiresSessionState 接口 下面展示了一个完整的示例代码,演示如何在 `.ashx` 文件中设置获取 `Session`: ```csharp using System; using System.Web; public class MyHttpHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public void ProcessRequest(HttpContext context) { // 设置 Session string inputKey = "MySessionKey"; string inputValue = "This is a test value"; if (context.Request.QueryString["action"] == "set") { context.Session[inputKey] = inputValue; // 设置 Session context.Response.Write($"Session key '{inputKey}' has been set to: {inputValue}"); } else if (context.Request.QueryString["action"] == "get") { object sessionValue = context.Session[inputKey]; // 获取 Session if (sessionValue != null) context.Response.Write($"The value of session key '{inputKey}' is: {sessionValue}"); else context.Response.Write("No such session key exists."); } } public bool IsReusable => false; } ``` 上述代码展示了两个功能:当请求参数中的 `action=set` 时,会向 `Session` 中存储数据;当 `action=get` 时,则尝试从 `Session` 中检索指定键的数据[^1]。 #### 关于 IsReusable 属性 `.ashx` 处理程序必须定义 `IsReusable` 属性,该属性指示处理程序实例是否可以被多个线程重用。大多数情况下将其设为 `false` 即可满足需求[^2]。 #### 使用场景说明 此方法特别适用于需要通过 AJAX 调用或其他轻量级 HTTP 请求方式与服务器交互的应用场合。例如,在 jQuery 登录模块开发过程中遇到无法保存管理员名称至 `Session` 的情况,只需让 `.ashx` 继承 `IRequiresSessionState` 就能解决问题[^4]。 #### 安全性提示 尽管实现了 `IRequiresSessionState` 后能够自由存取 `Session` 数据,但在实际项目中应谨慎对待敏感信息的存储位置及其生命周期管理,以保障系统的安全性与稳定性[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值