C# 如何将会话参数从jquery传递给ASHX处理程序

C# 如何将会话参数从jquery传递给ASHX处理程序,c#,jquery,asp.net,C#,Jquery,Asp.net,下面是我的Jquery代码,我想传递Session参数,例如Session[“ID”]。 Jquery调用ASHX页面 下面的所有参数都工作正常,会话参数有一个值,但是如何从Jquery传递会话参数 所以下面的代码“paramater Sessionparameter”应该替换为Session[“ID”]或类似的东西。我该怎么做 请给我一些建议 $('input[name$=btnTab1Save]').click( function (e) {

下面是我的Jquery代码,我想传递Session参数,例如Session[“ID”]。 Jquery调用ASHX页面

下面的所有参数都工作正常,会话参数有一个值,但是如何从Jquery传递会话参数

所以下面的代码“paramater Sessionparameter”应该替换为Session[“ID”]或类似的东西。我该怎么做

请给我一些建议

   $('input[name$=btnTab1Save]').click(
             function (e) {
                 // debugger;
                 // AJAX call to the handler
                 $.post(
                    'Consulting.ashx',
                 // data to the handler in the form of QueryString
                    {
                    tab: 'tab1',
                    // id is the second column within the row
                    Ilac_id: prevRow.find('td:eq(0)').text(),
                    ID: SESSION_PARAMATER,
                    begindate: $('input[name$=begindate]').val(),
                    weigth: $('input[name$=weigth]').val(),
                    continue: true,
                    freq: $('input[name$=freq]').val(),
                    reason: $('input[name*=radListreason]:checked').val(),
                    freq2: $('input[name$=radListfreq2]:checked').val(),
                    freetext: $('input[name$=freetext]').val()
                },
                 // callback function
                 // data is the JSON object
                    function (data) {
                        if (data.Success) {
                            // close the tab
                        }
                    },
                    "json"
                );
             });
我可以读取我的参数,比如Convert.Toint(context.Request.Form[“ID”])


我尝试过:
,但它不起作用……

如果它不是敏感数据,那么方法是将Session[“ID”]的值写入javascript变量,然后使用该变量将数据发布到ASHX处理程序。大概是这样的:

var sessionVariable = '<%=HttpContext.Current.Session["ID"].ToString()%>';

如果信息在会话中,ASHX可以直接访问会话内容

您需要实现
IReadOnlySessionState
,您就会没事了

<% @ webhandler language="C#" class="MyClass" %>

using System;
using System.Web;
using System.Web.SessionState;

public class MyClass: IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext ctx)
   {
       ctx.Response.Write(ctx.Session["ID"]);
   }
}

使用制度;
使用System.Web;
使用System.Web.SessionState;
公共类MyClass:IHttpHandler,IReadOnlySessionState
{
公共布尔可重用{get{return true;}}
公共无效处理请求(HttpContext ctx)
{
ctx.Response.Write(ctx.Session[“ID”]);
}
}

将会话变量传递给ASHX是一项要求,还是ASHX最好能够访问会话变量?后者更安全,工作量更少。如果只需读取IReadOnlySessionState接口,则只需将继承添加到该接口。如果您希望实际更改它,还可以从其他接口继承,但这将使您走上正确的道路。这是一个链接


编辑:更正了链接。

+1用于将非敏感数据放在您的答案上。会话信息存储在URL或COOKIE中。会话不应使用敏感信息,即使未在Javascript中打印。@Daok
会话不应使用敏感信息
有点激烈;我的意思是,您可以在会话中同时放置敏感和非敏感数据。例如,用于缓存目的。;)您可以尝试“缓存”用户信用卡信息。。。但在我看来,会话不用于缓存,也不用于敏感信息…@lcarus/@tugberk:我尝试过,但处理程序中出现错误:输入字符串的格式不正确。当我查看调试器(watch)时,ASHX中的值为“”。因此,它不传递值,而是传递语法代码/编程代码ASHX@Daok... 谢谢,这很有效。请解释为什么我要将isReusable设置为true。。。这在我的代码中是错误的(从互联网上复制的)。。请解释此属性的真实原因。。Thanks默认情况下,“IsReusable”方法设置为true,并指示另一个请求是否可以使用IHttpHandler实例。所以在你的情况下,你可以把它说成是假的或是真的,这并不重要。
 ID: sessionVariable, // etc ... 
<% @ webhandler language="C#" class="MyClass" %>

using System;
using System.Web;
using System.Web.SessionState;

public class MyClass: IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext ctx)
   {
       ctx.Response.Write(ctx.Session["ID"]);
   }
}