2016-02-06 2 views
2

Я вызываю метод RedirectToAction для вызова метода действия с другого контроллера, но он очищает все данные сеанса Я отлаживал global.asax и узнал, что когда я вызываю RedirectToAction, он вызывает Session_Start(). Я не знаю, как называется сеанс сеанса. Вот мой веб-код конфигурации для формы и сессии тегаMVC RedirectToAction вызывает Session_Start() в global.asax

для сеанса тега

<sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
    <providers> 
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
    </providers> 
</sessionState> 

и для тега формы

<authentication mode="Forms"> 
    <forms loginUrl="~/ControllerName/ActionName" timeout="2880" /> 
</authentication> 

это «~/ControllerName/ActionName» это то же метод с порогом Я звоню «RedirecToAction»

только для информации, что я пытаюсь, если бы я нашел файлы cookie для пользователя, он будет перенаправлен на главную страницу с страницы входа di di di rectly

оба метода действия находятся в разных контроллерах и в разных областях. здесь код, который использует метод «RedirecToAction»

public class LoginController : Controller{ 
public ActionResult Index() 
{ 
    if (Request.Cookies["UserName"] != null && Request.Cookies["Password"] != null) 
    { 
     FillLoginSession();//Fills Session with user data ex. Session["User_Id"] = 1; 
     return RedirectToAction("Index", "Home", new { area = "Home" }); 
    } 
}} 

и вот метод действия в другом контроллере, к которому я перенаправление.

public class HomeController : Controller{ 
public ActionResult Index() 
{ 
    return View(); 
}} 

ответ

2

ok У меня есть решение этой проблемы. я называл этот

Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 

перед инициализацией сессии моего метода. В моем IIS этот ключ «ASP.NET_SessionId» использовался для хранения сеанса в файлах cookie. , поскольку он был очищен от повторной инициализации всего, когда я перенаправляюсь на новую страницу.

1

Аутентификация форм и состояние сеанса - это две разные и несвязанные вещи.

Хотя вы не указали метод, который вызывает RedirectToAction, я подозреваю, что вы заранее ничего не храните в сеансе. If you don't actually store something in Session State, you will get a new session on every request..

При использовании состояния сеанса на основе файлов cookie ASP.NET не выделяет память для данных сеанса до тех пор, пока не будет использован объект Session. В результате для каждого запроса страницы создается новый идентификатор сеанса, пока не будет доступен доступ к объекту сеанса. Если вашему приложению требуется статический идентификатор сеанса для всего сеанса, вы можете либо реализовать метод Session_Start в файле приложения Global.asax, либо сохранить данные в объекте Session, чтобы исправить идентификатор сеанса, или вы можете использовать код в другой части вашего приложение для явного хранения данных в объекте Session.

Чтобы повторить заявку, чтобы устранить звонок до Session_Start, перед перенаправлением необходимо поместить что-то в состояние сеанса.

+0

Я добавил код, из которого я вызываю метод RedirectToAction. Вы можете видеть, что я заполняю переменные сеанса непосредственно перед методом RedirectToAction, но когда вызывается RedirectToaction, он вызывает Session_Start и все установленные ранее значения сеанса очищаются. –

Смежные вопросы