6

ログイン時に、新しい SessionId を生成したいと考えています。機能するソリューションを1つ見つけましたが、かなりハックなものが必要で、アプリに完全な信頼のsecurityPolicy設定が必要です。

これを達成する他の方法はありますか?

4

2 に答える 2

6

これは機能するように見えます:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

そのCookieをクリアすることにより、新しいセッションIDを持つ新しいセッションがサーバーに作成されます。

(参照:Microsoftサポート

編集:これは、AJAX(jQueryを使用)を使用してページを更新せずにサーバーコードを呼び出す例です。2回呼び出します。1回は最初のセッションを削除し、もう1回は新しいセッションを生成します。より良い方法があるかもしれませんが、これは機能します。

function newSession() {
    jQuery.ajax({
        type: "POST",
        url: "WebForm1.aspx/ClearSession",
        data: "{}",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function () {
            jQuery.ajax({
                type: "POST",
                url: "WebForm1.aspx/NewSession",
                data: "{}",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function () { console.log("Success!"); },
                error: function (x, y, z) {
                    console.log("Failure!");
                }
            });
        },
        error: function (x, y, z) {
            console.log("Failure!");
        }
    });
}

そして、コードビハインド(WebFormsの場合-MVCコントローラーを使用してこれを行うこともできます):

[WebMethod]
public static void ClearSession()
{
    HttpContext.Current.Session.Abandon();
    HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}

[WebMethod]
public static void NewSession()
{
    HttpContext.Current.Session["x"] = 123;
}
于 2012-08-27T20:11:51.747 に答える