Похоже, это работает:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Сняв, что печенье, новый сеанс с новым идентификатором сессии будет создан на сервере.
(Справка: Microsoft Support)
EDIT: Вот пример использования 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!");
}
});
}
И отделенного кода (для 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;
}
Рамки на самом деле не настроены с помощью крючков для этого - вот почему решение, которое вы нашли, «хакерское». – Oded
Почему вы не хотите использовать идентификатор сеанса, который был сгенерирован при инициализации сеанса? (то есть, какую проблему вы пытаетесь решить?) –
Проблема с созданием нового файла cookie sessionId при выходе из системы, время идет, а следующий пользователь, который входит в этот браузер, всегда будет использовать этот sessionId, который является дырой в безопасности если кто-то записал sessionId в промежуточный период –