在ASP.NET中生成新的SessionId

Jar*_*ett 4 asp.net

登录时我想生成一个新的SessionId.我找到了一个有效的解决方案,但它需要一些非常hackish的东西,并要求应用程序具有Full Trust securityPolicy设置.

有没有其他方法来实现这一目标?

Joe*_*nos 5

看起来像这样:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Run Code Online (Sandbox Code Playgroud)

通过清除该cookie,将在服务器上创建具有新会话ID的新会话.

(参考:Microsoft支持)

编辑:这是一个使用AJAX(使用jQuery)调用服务器代码而不刷新页面的示例 - 它调用两次,一次删除第一个会话,一次生成一个新会话.可能有更好的方法,但这确实有效.

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

在代码隐藏方面(对于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;
}
Run Code Online (Sandbox Code Playgroud)