Logged-in 用户在一段时间后收到错误 "Authorization has been denied for this request"
Logged-in user gets an error "Authorization has been denied for this request" after a while
我在 MVC4 (.NET) 网站上有一个 single-page-application。
一些方法具有特定角色的权限。
当用户登录系统时(使用 cookie)
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
一切正常,但如果用户让网站保持打开状态并在一段时间后返回(我认为至少 30 分钟)没有刷新(这是一个单页应用程序,所以不需要刷新)然后尝试在网站上做一些事情 - 用户收到错误
"Authorization has been denied for this request."
刷新后 (F5) - 一切恢复正常。
我想也许 session 已经结束或类似的事情。我该如何解决?
在我的 web.config 中有这些行:
<authentication mode="Forms">
<forms loginUrl="~/" timeout="2880" slidingExpiration="true" cookieless="UseCookies" />
</authentication>
您可以在 Web 配置中增加超时值,在上面粘贴的表单身份验证部分。
<authentication mode="Forms">
<forms loginUrl="~/" timeout="50000000" slidingExpiration="true" cookieless="UseCookies" />
</authentication>
您的 FormAuthentication 超时 48 小时绰绰有余。
问题是SessionState超时;默认情况下,它会在 20 分钟后过期。
你有两个选择-
- 增加 SessionState 超时。 仅供参考:如果你增加太多,它会成为安全漏洞。
例如,在web.config(480=8小时)中添加sessionState标签。
<sessionState timeout="480" />
或
- 在客户端创建一个计数器。如果页面空闲 19 分钟,请 ping 到服务器。基本上,您需要在 sessionState 超时之前向服务器发出请求。
例如,像这样创建一个虚拟控制器并通过 ajax -
调用
public partial class PingController : Controller
{
public ActionResult Index()
{
return Content("Ping!");
}
}
我在 MVC4 (.NET) 网站上有一个 single-page-application。 一些方法具有特定角色的权限。
当用户登录系统时(使用 cookie)
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
一切正常,但如果用户让网站保持打开状态并在一段时间后返回(我认为至少 30 分钟)没有刷新(这是一个单页应用程序,所以不需要刷新)然后尝试在网站上做一些事情 - 用户收到错误
"Authorization has been denied for this request."
刷新后 (F5) - 一切恢复正常。
我想也许 session 已经结束或类似的事情。我该如何解决?
在我的 web.config 中有这些行:
<authentication mode="Forms">
<forms loginUrl="~/" timeout="2880" slidingExpiration="true" cookieless="UseCookies" />
</authentication>
您可以在 Web 配置中增加超时值,在上面粘贴的表单身份验证部分。
<authentication mode="Forms">
<forms loginUrl="~/" timeout="50000000" slidingExpiration="true" cookieless="UseCookies" />
</authentication>
您的 FormAuthentication 超时 48 小时绰绰有余。
问题是SessionState超时;默认情况下,它会在 20 分钟后过期。
你有两个选择-
- 增加 SessionState 超时。 仅供参考:如果你增加太多,它会成为安全漏洞。
例如,在web.config(480=8小时)中添加sessionState标签。
<sessionState timeout="480" />
或
- 在客户端创建一个计数器。如果页面空闲 19 分钟,请 ping 到服务器。基本上,您需要在 sessionState 超时之前向服务器发出请求。
例如,像这样创建一个虚拟控制器并通过 ajax -
调用public partial class PingController : Controller
{
public ActionResult Index()
{
return Content("Ping!");
}
}