aspnet身份用户在几秒/分钟后自动注销

时间:2014-05-21 20:20:56

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

如果你从VS2013开始应用aspnet身份的mvc5项目。您将在_LoginPartiaView.cshtml中找到以下代码:

@if (Request.IsAuthenticated )
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
    @Html.AntiForgeryToken()
                @Html.ActionLink( "Hello " + User.Identity.GetUserName() , "profile", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>

    }
}

这意味着每次请求都会检查用户是否经过身份验证。如果可能的话,这将是美好的。

然而我的问题是在开发机器上进行测试,它运行正常。但是当在远程服务器[共享主机]上进行测试时,用户在空闲几秒钟后就会注销。

然后我搜索了这个SO - isAuthenticated result is false并且接受的答案说:

  

主机在几秒钟内杀死服务器中的AppPool   空闲。

并且有些评论说:

  

注意AppPool仍然会被不时地回收,所以   只有少数用户可能会这样做。

所以我认为session [mode:SqlServer]可以作为解决方案;代码将检查session["userName"]而不是@if (Request.IsAuthenticated )

问题是: 使用会话存储用户名和验证操作可接受? 还有其他更好的概念适用于此吗?

修改: 回答布拉德Q;这是相关的web.config设置:

 <authentication mode="Forms" >
      <forms loginUrl="/Account/Login"
              timeout="180"/>
    </authentication>

    <compilation debug="false" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />


    <sessionState mode="SQLServer" 
                  timeout="60"
                  allowCustomSqlDatabase="true"
                  sqlConnectionString="Data Source=xxxx.net;Initial Catalog=luckysessions;User ID=xxadmin;Password=xxxx;" 
                  cookieless="false"/>

第二次编辑:

在阅读了这个问题here后,我开始重新思考并想添加这个问题: 它与Web场服务器设置有关吗?

0 个答案:

没有答案