【问题标题】:Can't control Session time in ASp MVC 4.5 Application无法控制 ASp MVC 4.5 应用程序中的会话时间
【发布时间】:2017-05-10 00:42:59
【问题描述】:

我正在使用这个登录:

 var f = from b in db.AdminToybias
                        where b.UserName == a.UserName
                        && b.Password == a.Password
                        select b;
                if (f.Count() >= 1)
                {
                    Session["uname"] = f.FirstOrDefault().UserName;
                    Session["pass"] = f.FirstOrDefault().Password;
                    Session["role"] = f.FirstOrDefault().Role;

我都试过了:

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

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="288000" />
</authentication>

但应用程序会在几分钟后自动注销用户(不知道确切时间)。我想获得会话无限时间,直到他手动注销。 我尝试了这么多小时但失败了。我能做些什么来实现这一目标? 我正在使用 Godaddy 托管。

【问题讨论】:

  • 你会在这几分钟内重新启动应用程序吗?或者即使您不重新启动会话也会过期?
  • 不,我暂时不会重新启动它。 @Nemanja Perovic
  • In Proc 是一个非常糟糕的会话管理选择,如果您需要在任何确定的时间内保留一些东西。 In Proc 的意思是“在进程中”,因此,与 App Pool 进程一起生死存亡,该进程可以在任何时候因多种原因进行回收。改为使用像 SQL Server 这样的持久存储。

标签: c# asp.net asp.net-mvc session


【解决方案1】:

它们是不同的东西。 Forms Authentication Timeout 值设置身份验证 cookie 设置为有效的时间量(以分钟为单位),这意味着在值分钟数之后,cookie 将过期并且用户将不再进行身份验证 - 他们将被重定向到自动登录页面-。 SlidingExpiration=true 值基本上是在每次请求发出后,计时器都会被重置,只要用户在超时值内发出请求,他们就会继续进行身份验证。如果您设置slidingExpiration=false,则无论用户是否在超时值内发出请求,身份验证cookie都会在指定的分钟数后过期。

SessionState 超时值设置会话状态提供程序为特定会话在内存(或正在使用的任何后备存储、SQL Server、OutOfProc 等)中保存数据所需的时间量。例如,如果您使用示例中的值将对象放入 Session 中,则此数据将在 30 分钟后删除。用户可能仍会通过身份验证,但 Session 中的数据可能不再存在。每次请求后始终重置会话超时值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2019-12-03
    • 2016-12-20
    相关资源
    最近更新 更多