我在MVC3应用程序中使用内置的Forms身份验证。我目前面临的问题是Cookie slidingexpiration
无效。
web.config 文件包含以下行:
<forms loginUrl="/auth" name="authy" path="/" slidingExpiration="true" />
note ::即使默认值为true,我也声明了slidingexpiration
。
在我的代码中,我使用的是基本的Membership Provider类,没有扩展或修改。我的 global.asax 文件使用的是系统默认值。
添加代码示例没有意义,因为这只是一个没有添加额外代码的基础项目。我最初使用FormsAuthentication.SetAuthCookie(username, true);
设置Cookie。
答案 0 :(得分:3)
滑动过期会重置有效的过期时间 如果发出请求,则认证cookie超过一半 超时间隔已过。如果cookie过期,则用户必须 重新认证。将SlidingExpiration属性设置为false可以 通过限制应用程序的时间来提高应用程序的安全性 根据配置的超时,身份验证cookie有效 值。
在这句话中要注意的两件非常重要的事情:
您尚未指定超时,因此将使用默认值30分钟。
在这句话中需要注意的另一件重要事情是:
将SlidingExpiration属性设置为false可以改善 安全
但是我猜你不关心安全性,因为你已经激活了它。
更新:
以下是一个说明这个概念的完整示例:
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
FormsAuthentication.SetAuthCookie("foo", true);
return View();
}
[Authorize]
public ActionResult Foo()
{
return Json(User.Identity.Name + " is still authenticated", JsonRequestBehavior.AllowGet);
}
}
查看:
<script type="text/javascript">
$(function () {
(function () {
var caller = arguments.callee.caller;
window.setTimeout(function () {
$.getJSON('@Url.Action("foo")', function (result) {
$('#msg').append($('<div/>', { text: result }));
caller();
});
}, 10000);
})();
});
</script>
<div id="msg"></div>
的web.config:
<authentication mode="Forms">
<forms
loginUrl="/auth"
name="authy"
path="/"
slidingExpiration="true"
timeout="1"
/>
</authentication>
无论您在索引视图中停留多长时间,用户仍将进行身份验证。
答案 1 :(得分:0)
将cookieless="UseCookies"
添加到web.config表单属性。滑动到期现在正在运行。我不明白这有什么不同,但它已经做了一些事情。我想这只是其中一个怪癖。
答案 2 :(得分:0)
我有一个问题,我的滑动过期无效。
我的路径设置不正确。