4

jquery-Ajax呼び出しで使用するHttpHandlerを作成しました。

このHttpHandlerはデータベースにアクセスし、現在歌われているユーザーに関連する何かをチェックします。

ユーザーは、 user_idという属性でSessionを使用してサインインしていると見なされます。

Session["user_id"] = userId;

HttpHandlerでこのセッションを取得しようとしましたが、機能しないようです。

そこで、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でハンドラーにアクセスできます。

では、この状況で何ができるでしょうか?ハンドラーにデータベースアクセス用のuser_idを取得させたいのですが、このuser_idがサインインしたユーザーの実際のIDであることを確認したいと思います。ハンドラーでセッションにアクセスする方法はありませんか?

4

3 に答える 3

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();
    }
}
于 2012-12-28T13:42:47.680 に答える
2

ハンドラーを実装IRequiresSessionStateし、ハンドラーがセッション状態を使用することを ASP.NET に通知します。次に、クライアントから送信されたセッション Cookie がハンドラーによって認識され、たとえば、他の aspx ページと同様にサーバー側でアクセスできます。

またIReadOnlySessionState、読み取り専用のセッション アクセスにも使用できます。

于 2012-12-28T13:43:14.357 に答える
1

あなたがしたいことは、それを に変えてデータ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

于 2012-12-28T13:44:03.347 に答える