用户会话ID作为Ajax调用中的参数

use*_*700 4 c# asp.net ajax jquery httphandler

我已经创建了一个HttpHandler,我将使用jquery-Ajax调用.

这个HttpHandler将访问数据库并检查与当前被烧毁的用户相关的内容.

通过使用Session,使用名为user_id的属性将用户视为已登录.

Session["user_id"] = userId;
Run Code Online (Sandbox Code Playgroud)

我试图在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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个坏主意,任何阅读代码的人都可以使用他想要的id访问Handler.

那么在这种情况下我该怎么办?我希望Handler获取user_id以进行数据库访问,但我想确保此user_id是已登录用户的实际ID.无法访问处理程序中的会话?

Yiğ*_*ner 6

使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)