c# - .NET 中的 Cookie 和 session 过期

标签 c# asp.net-mvc-4 session cookies single-page-application

我有一个 MVC4 单一应用程序页面。登录页面有 3 个字段:用户、密码和“记住我”复选框。 C#登录代码是这样的:

   if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
   {
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
       return Json(new { success = true, redirect = returnUrl });
   }
   else
   {
       ModelState.AddModelError("", "The user name or password provided is incorrect.");
   }

我想这样做:

  • 如果用户使用“记住我”登录true - Cookie 将保留到用户注销为止。

  • 如果用户使用“记住我”登录false - Cookie 将在 3 小时后过期。

在 web.config 中我有以下代码:

<authentication mode="Forms">
      <forms loginUrl="~/" timeout="180" cookieless="UseCookies" slidingExpiration="false" />
</authentication>
<sessionState timeout="180"  />

问题是当用户短时间内(通常是 10-30 分钟)没有触摸页面,然后用户尝试在页面中执行某些操作时 - 就会出现错误

"Authorization has been denied for this request."

(虽然sessionStation超过了30分钟!)

用户刷新页面后 - 如果 cookie 尚未过期 - 一切正常。但我当然不想让用户每 15 分钟左右刷新一次页面,它是一个单页面应用程序。

所以,我尝试将 slidingExpiration 更改为“true”并每 17 分钟创建一次 ping(使用 ajax),它确实停止了 session 过期和烦人的消息 - 但 cookie 没有3 小时后过期(我使用“记住我”“错误”登录)!

我能做什么?

最佳答案

从 IIS 管理控制台右键单击您的应用程序池,然后查找“空闲超时(分钟)”。

您可以将该设置调整为 0(零),这将有效禁用超时,以便应用程序池永远不会因空闲而关闭。

关于c# - .NET 中的 Cookie 和 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28134459/

相关文章:

c# - 使用 MVC WebApi 2 在运行时更改数据库

c# - 在类中使用 UserProfile 外键在 MVC 4 中创建新的配置文件

php - symfony2.8 与 php 7.2 中的 session_cache_limiter 错误

c# - 在 RowUpdating (ASP.NET GridView) C# 期间获取 GridView 内标签的旧值

c# - SSIS 自定义数据流组件 - 重定向错误行

c# - 直接绑定(bind) DataGrid 列

c# - 如何从浏览器调用我的 WCF 服务?

c# - 如何捕获从多个页面打开应用程序的用户

spring - 如何跟踪 session 创建

c# - 如何使用 Linq 获取每个组中的第一条记录