MVC 5会话问题

时间:2014-11-06 20:28:39

标签: asp.net-mvc session asp.net-mvc-5

更新1:如果我通过ajax请求设置会话,当js确实刷新当前操作时,我无法使用此会话。现在,如果我通过非ajax请求设置会话,那么这些请求也可以在其他控制器内部甚至是ajax动作中使用。

更新2 :删除并添加有助于解决此问题的会话

<modules runAllManagedModulesForAllRequests="true">
      <remove name="Session" />
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
    </modules>

我正在设置一个新站点,它使用表单身份验证,我正在验证活动目录。在成功进行身份验证后,我将用户类放入会话中,当我立即检查时,我可以

//login user and put the user in session
AuthenticationHelper.LoginUser(user, loginModel.IsRememberMe);
//just checking
var userFromSession = AuthenticationHelper.GetUserFromSession();

public static void LoginUser(User user, bool isRememberMe)
        {
            //login user and put user in the session

            //log off first
            LogOff();

            //add user to session
            AddUserToSession(user);

            //sign in
            if (!isRememberMe)
            {
                //Set cookie
                FormsAuthentication.SetAuthCookie(user.UserId, false);
                /*
                GenericIdentity identity = new GenericIdentity(user.UserId);
                string[] roles = { person.PersonaType };
                GenericPrincipal principal = new GenericPrincipal(identity, roles);
                HttpContext.Current.User = principal;
                 */
            }
            else
            {
                //Create Persistent cookie
                var ticket = new FormsAuthenticationTicket(user.UserId, isRememberMe, 1);
                var encrypted = FormsAuthentication.Encrypt(ticket);
                var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
                authCookie.Expires = System.DateTime.Now.AddYears(1);
                if (HttpContext.Current != null)
                {
                    HttpContext.Current.Response.Cookies.Add(authCookie);
                }
            }
        }


public static void AddUserToSession(User user)
            {
                if (HttpContext.Current != null && HttpContext.Current.Session != null)
                {
                    HttpContext.Current.Session["SignedInUser"] = user;
                }
            }

            public static User GetUserFromSession()
            {
                User user = null;
                if (HttpContext.Current != null && HttpContext.Current.Session != null)
                {
                    user = (User) HttpContext.Current.Session["SignedInUser"];
                }
                return user;
            }

但是,当我在登录后的同一时刻刷新页面时,我的会话将返回null。在这种情况下, Request.IsAuthenticated为true,User.Identity.Name中包含我的用户名

我在web.config中也有以下内容。

                  

我在这里缺少什么?

这是完整的web.config。要么我错过了web.config中的某些内容,要么是在干扰我的会话。

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <!-- Move site specific app settings to their own environment config file inside Configs folder. Keep common settings here -->
  <appSettings file="Configs\AppSettings_CurrentSprint.config">
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>


  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />

    <machineKey validationKey="" validation="SHA1" decryption="AES" />

    <sessionState mode="InProc" timeout="20" />

    <authentication mode="Forms">
      <forms loginUrl="~/EPT/Home" name="SalesSupport.ASPXFORMSAUTH" enableCrossAppRedirects="true" timeout="20" slidingExpiration="true" />
      <!-- timeout="600" -->
    </authentication>
    <membership>
      <providers>
        <clear />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear />
      </providers>
    </profile>

    <customErrors mode="Off" />

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
        <add namespace="System.Web.Optimization" />


      </namespaces>
    </pages>

  </system.web>

  <system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <!--Had to set this for it to work on IIS 7-->
    <modules runAllManagedModulesForAllRequests="true" />

    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <staticContent>
      <!--Required to get IIS to compress javascript files-->
      <remove fileExtension=".js" />
      <mimeMap fileExtension=".js" mimeType="text/javascript" />
    </staticContent>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

0 个答案:

没有答案