Очистка сессии в ASP.NET
Я новый разработчик, и мне было поручено выяснить, почему наша функция выхода из системы не работает. Я перепробовал все возможные методы, которые смог найти. Ниже приведен журнал, который я сохранил, который включает методы, которые я использовал.
добавлена кнопка выхода из CommonHeader.ascx и форма
пробовал множество методов выхода.аспн.форма vb, чтобы завершить или очистить сеанс, но ни один из них работа.
а. ClearSession процедуру Sub определенными в выход.аспн.форма глаг:
Session("Variable") = ""
FormsAuthentication.SignOut()
Session.RemoveAll()
Session.Abandon()
Session.Clear()
b. Также добавил Это в верхней части подпрограммы page_load sub:
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoServerCaching()
HttpContext.Current.Response.Cache.SetNoStore()
c. Также изменена подпрограмма clearsession на Session.Contents.Remove("Variable")
С Session("Variable") = ""
ни один из этих методов работы. Мы используем siteminder, которые, и мне было интересно, является ли это корнем проблемы. Я просто не могу найти ничего на очистке сеанса, который использует siteminder, которые. Также имейте в виду, что это приложение закодировано с помощью Visual Studio 2003.
это код для кнопки, которую я использую в файле ascx:
athp: TopNavText Title=" выход из системы "NavigateUrl=" выход из системы.аспн" целевых="соответствующим образом"/
затем на "выход.форма "aspx" я пробовал просто использовать один из описанных выше методов или комбинацию каждого из них. Это код, прежде чем я когда-либо прикоснусь к нему:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ClearSession()
Response.Redirect("login.aspx")
End Sub
Public Sub ClearSession()
Session("Variable") = ""
End Sub
5 ответов
наконец-то понял решение, я изначально не определял домен при удалении cookie, который содержал идентификатор сеанса siteminder. Код, который я использовал, выглядит следующим образом:
Dim cookie3 As HttpCookie = New HttpCookie("SMSESSION", "NO")
cookie3.Expires = DateTime.Now.AddYears(-1)
cookie3.Domain = ".domain.com"
Response.Cookies.Add(cookie3)
Response.Redirect("login.aspx")
такой вопрос: formsauthentication-signout-does-not-log-the-user-out описывает проблему с не очистки куки даже после вызова FormsAuthentication.SignOut(). Это похоже на вашу проблему, они говорят, что это ошибка с .NET, и как ваше использование 1.1 это звучит отчетливо возможно.
Привет друг, пожалуйста, добавьте событие щелчка кнопки в пользовательском управлении. И в случае щелчка добавьте следующий код и удалите весь другой код.
Сессии("Переменная") = "";
смотреть на этот пост
применяются ли его C sharp или vb те же правила. Вы вызываете сеанс abandon затем clear, но к тому времени, когда вы вызываете clear, сеанс все равно должен уйти.
Clear сохраняет состояние сеанса вместе с объектами в нем, поэтому, вызывая его после отказа, вы можете фактически повторно инициализировать сеанс для пользователя, но с очищенными переменными.
см. этот пост для заказ и правильный способ убить сеанс и перенаправить на страницу входа в систему, если у вас есть один
первое, что следует отметить, что если вы используете проверку подлинности форм, сеанс не имеет абсолютно никакого отношения к тому, вошел ли пользователь в систему.
вызов FormsAuthentication.В файле signout удалит данные билета проверки подлинности форм из файла cookie или URL-адреса, если CookiesSupported имеет значение false.
но это не повлияет на то, что хранится в сеансе.
обновление
Почему вы думаете, что выйдите (Метод formsauthentication.SignOut) не работает? Что вы ожидаете, когда вы нажмете на выход, и что именно происходит на самом деле?
Я бы избавился от всего кода, чтобы очистить сеанс и посмотреть на это. Например, посмотрите на HTTP-трафика с помощью такого инструмента, как Саша: вы должны иметь возможность видеть, что файл cookie FormsAUthentication удаляется при нажатии на выход из системы.