Не помещайте ваше действие Logout
в Form
.Ваш ActionLink
должен работать правильно, если вы дали ему правильные параметры.
Ваш ActionLink
будет выглядеть следующим образом:
<a href='@Url.Action("LogOut", "Home")'>Log Out</a>
И ваш результат действия Controller
будет выглядетьнапример:
public ActionResult Logout()
{
if (Request.Cookies["user"] != null)
{
var user = new HttpCookie("user")
{
Expires = DateTime.Now.AddDays(-1),
Value = null
};
Response.SetCookie(user);
Response.Cookies.Clear();
}
if(Session["UserName"] != null)
{
Session["UserName"] = null;
Session["IsAdmin"] = null;
}
//Session.Abandon();
//Session.Clear();
return RedirectToAction("Login", "Home");
}
Используйте RedirectPermanent
, если ресурс был перемещен навсегда и больше не будет доступен в своем предыдущем местоположении.Большинство браузеров кэшируют этот ответ и выполняют перенаправление автоматически, без повторного запроса исходного ресурса.
Используйте Redirect
, если ресурс может быть доступен в том же месте (URL) в будущем.Так что в вашем случае Redirect
будет вариантом, так как это будет затронуто любым пользователем, выходящим из вашей системы.
Session.Abandon
удаляет все объекты, хранящиеся в сеансе.Если вы не вызываете метод Abandon явно, сервер удаляет эти объекты и уничтожает сеанс по истечении времени сеанса.Он также вызывает такие события, как Session_End
Session.Clear
удаляет все ключи и значения из коллекции состояния сеанса.
Подумайте об этом так: Session.Clear можно сравнить с удалением всех элементов изкорзину, в то время как Session.Abandon больше похож на отказ от самой корзины.
Вы можете использовать любой из этих двух методов для уничтожения или очистки вашей Сессии.В настоящее время вы явно делаете Clear
, присваивая вашим UserName
и IsAdmin
значение NULL.