C# 如何将会话参数从jquery传递给ASHX处理程序
下面是我的Jquery代码,我想传递Session参数,例如Session[“ID”]。 Jquery调用ASHX页面 下面的所有参数都工作正常,会话参数有一个值,但是如何从Jquery传递会话参数 所以下面的代码“paramater Sessionparameter”应该替换为Session[“ID”]或类似的东西。我该怎么做 请给我一些建议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) {
$('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"]);
}
}