用户会话ID作为Ajax调用中的参数
我已经创建了一个HttpHandler ,我将使用jquery-Ajax调用。
这个HttpHandler将访问数据库并检查与当前被烧毁的用户相关的内容 。
通过使用Session,使用名为user_id的属性将用户视为已登录。
Session["user_id"] = userId;
我试图在HttpHandler中检索这个Session ,但这似乎不起作用。
所以我考虑将user_id作为参数发送。
var user_id = //Retrieved in some way... $.ajax({ url: 'QuestionRate.ashx?id=user_id', success: function (msg, status, xhr) { alert(msg); }, error: function () { alert(msg); } });
但这看起来似乎是一个坏主意,任何阅读代码的人都可以使用他想要的id访问Handler。
那么在这种情况下我该怎么办? 我希望Handler获取user_id以进行数据库访问,但我想确保此user_id是已登录用户的实际ID。 无法访问处理程序中的会话?
使用ajax调用传递会话ID听起来不太好。
您应该使用标记IReadOnlySessionState接口标记处理程序,并通过HttpContext.Current.Session
实例以只读方式访问会话。
代码示例:
public class FooHandler : IHttpHandler, IReadOnlySessionState { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { string user_id = context.Session["user_id"].ToString(); } }
使您的处理程序实现IRequiresSessionState
,它将通知ASP.NET您的处理程序使用会话状态。 然后,处理程序将识别从客户端发送的会话cookie,您可以在服务器端访问它,例如在任何其他aspx页面中。
您还可以使用IReadOnlySessionState
进行只读会话访问。
您要做的是将其转换为POST
并将其添加到POST
数据中。 然后,当与SSL密钥结合使用时, POST
数据将自动加密。 所以你可以尝试的是:
var user_id = //Retrieved in some way... $.ajax({ type: "POST" url: 'QuestionRate.ashx', data: { userid: user_id } success: function (msg, status, xhr) { alert(msg); }, error: function () { alert(msg); } });
然后在您的HTTP处理程序中,您可以使用Request
对象将其拉出。
jQuery AJAX API