我正在调用RedirectToAction方法从另一个控制器调用action方法,但它会清除所有会话数据 我在global.asax中调试并发现当我调用RedirectToAction时它会调用Session_Start()方法。 我不知道如何调用会话开始。 这是我的表单和会话标记的Web配置代码
用于会话代码
<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>
这&#34;〜/ ControllerName / ActionName&#34;与我打电话的方式相同&#34; RedirecToAction&#34;
仅供参考我正在尝试的是如果我为用户找到了cookie,他将直接从登录页面重定向到主页
两种动作方法都在不同的控制器和不同的区域。 这是使用&#34; RedirecToAction&#34;的代码。方法
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();
}}
答案 0 :(得分:2)
好的,我得到了解决这个问题的方法。 我在说这个
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
从我的方法初始化会话之前。 在我的IIS中,此键“ASP.NET_SessionId”用于在cookie中存储会话。 当它被清除时,它重新初始化我重定向到新页面。
答案 1 :(得分:1)
表单身份验证和会话状态是两个不同且无关的事物。
虽然您还没有显示调用RedirectToAction
的方法,但我怀疑您事先没有将任何内容存储在会话状态中。 If you don't actually store something in Session State, you will get a new session on every request.
使用基于cookie的会话状态时,在使用Session对象之前,ASP.NET不会为会话数据分配存储空间。结果,为每个页面请求生成新的会话ID,直到访问会话对象。如果您的应用程序需要整个会话的静态会话ID,您可以在应用程序的Global.asax文件中实现Session_Start方法,并将数据存储在Session对象中以修复会话ID,或者您可以使用代码应用程序的另一部分,用于在Session对象中显式存储数据。
重申一下,要消除对Session_Start
的调用,您需要在重定向之前将某些内容置于会话状态。
Session["TheKey"] = "TheValue";
return RedirectToAction("TheAction");