У меня есть приложение MVC, и я использую переменную сеанса для хранения переменной для идентификации вошедшего в систему пользователя.Это работает нормально везде, кроме IE.Первый вход в систему будет работать, но если я выйду из системы, которая удалит переменную сеанса, а затем снова войдет в систему, она не установит переменную сеанса снова.Я делаю Response.Redirect обратно на страницу входа после выхода из системы.
Я пробовал несколько вещей, включая переход на запрос Server.Transfer и установку фиктивного заголовка P3P, потому что, по-видимому, IE все еще читает это!Домен не имеет подчеркивания, что также является проблемой в IE.Любая помощь по этому вопросу будет принята с благодарностью!
Login:
Session.Add("UserID", extr_user.extr_id);
Logout:
Session.Remove("UserID");
Response.Redirect(Url.Action("Login", "Home"));
РЕДАКТИРОВАТЬ
Тестовый код для имитации проблемы с потерянной переменной сеанса, проблема очевидна при запуске как на сервере, так и на локальном хосте
Скачать код здесь
Контроллер дома:
public class HomeController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Home()
{
if (Session["UserID"] == null)
{
Response.Redirect(Url.Action("Login"));
}
return View();
}
public string doLogin(string Email, string Password)
{
Session.Add("UserID", 1);
return Url.Action("Home");
}
public void Logout()
{
Session.Remove("UserID");
Response.Redirect(Url.Action("Login"));
}
}
Home.cshtml:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
<a href="@Url.Action("Logout", "Home")">Logout</a>
</div>
</body>
</html>
Login.cshtml:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
@model LoginTest.Models.User
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script>
function Login() {
var email = $("#Username").val();
var password = $("#Password").val();
$.ajax({
url: '@Url.Action("doLogin", "Home")',
type: 'GET',
data: { Email: email, Password: password },
dataType: "html",
success: function (data) {
window.location.replace(data);
},
Error: function (xhr, status, error) {
console.log(error);
}
});
}
</script>
</head>
<body>
<div>
@Html.LabelFor(m => m.Username)
@Html.TextBoxFor(m => m.Username)
</div>
<div>
@Html.LabelFor(m => m.Password)
@Html.TextBoxFor(m => m.Password)
</div>
<div>
<input type="button" id="btnLogin" onclick="Login()" value="Login" />
</div>
</body>
</html>
RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Home", id = UrlParameter.Optional }
);
}
}