У меня есть веб-приложение MVC3, которое эффективно «привязано» к классическому веб-сайту ASP (т. Е. Старые страницы - классическая ASP, новые страницы - ASP.Net MVC).Сайт требует, чтобы пользователь вошел в систему, поэтому для защиты новых страниц MVC я проверяю наличие cookie и использую идентификатор для получения данных сеанса из базы данных, которая была создана классической страницей входа ASP.
Поскольку пользователь может переключаться между старыми и новыми страницами, и я не делюсь данными сеанса между двумя приложениями, я проверяю файлы cookie и извлекаю данные каждый запрос в моем методе действия с именем LogIn:
public PartialViewResult LogIn()
{
var cookieId = DecodeCookieId(System.Web.HttpContext.Current.Request.Cookies["cookiename"].Value);
LoggedInViewModel viewModel = new LoggedInViewModel
{
Session = sessionRepository.Sessions.FirstOrDefault(s => s.GGAPSession_ID == cookieId)
};
return PartialView(viewModel);
}
Это передает данные в ViewModel, которая отображает имя пользователя, вошедшего в систему, вверху каждой страницы MVC, поэтому я подумал, что это было бы хорошим местом для проверки.
Проблема возникает, когда я пытаюсь изменить LogIn (), чтобы проверить наличие cookie и перенаправления, если не найден:
public ActionResult LogIn()
{
if (System.Web.HttpContext.Current.Request.Cookies["cookiename"] != null)
{
// same method contents as above
}
else
{
return Redirect("http://localhost/index.asp");
}
}
Я получаю «Дочерним действиям не разрешено выполнять действия перенаправления»что я понимаю, но как мне обойти это?Должен ли я делать проверку файлов cookie в другом месте?И где я должен делать управление сессиями?