ログイン時に、新しい SessionId を生成したいと考えています。機能するソリューションを1つ見つけましたが、かなりハックなものが必要で、アプリに完全な信頼のsecurityPolicy設定が必要です。
これを達成する他の方法はありますか?
ログイン時に、新しい SessionId を生成したいと考えています。機能するソリューションを1つ見つけましたが、かなりハックなものが必要で、アプリに完全な信頼のsecurityPolicy設定が必要です。
これを達成する他の方法はありますか?
これは機能するように見えます:
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;
}