gpt4 book ai didi

asp.net - 防止 FormsAuthentication 过期时间增加

转载 作者:行者123 更新时间:2023-12-02 11:50:21 25 4
gpt4 key购买 nike

我有一个相对简单的基于 WebForms 的网站,使用表单例份验证:

<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="secure/home.aspx" name=".AdminSite" />
</authentication>

由于没有明确提及,slidingExpiration 默认设置为 true,因此只要用户仍在网站上导航,就不会注销。

但是,我希望特定页面增加到期时间。在 web.config 中或在代码中这可能吗?我见过的唯一建议提到将 slidingExpiration 设置为 false,这将适用于侧面。

身份验证 cookie 的设置使用:

FormsAuthentication.RedirectFromLoginPage(username, False)

因此更改身份验证 cookie 本身是不切实际的。

最佳答案

滑动过期是由 FormsAuthentication 模块通过在必要时重新发出 cookie 来实现的。为了防止滑动,需要防止cookie更新的发生。

只需从响应中删除 FormsAuthentication cookie 即可完成此操作。

下面是一个非常简单的 Web 表单背后的代码。 aspx 页面有一个 div,它显示 Page_Load 事件的输出。

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
testDiv.InnerHtml = "Hi, cookie is: " + HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value;
testDiv.InnerHtml += "<br />";
var ticket = FormsAuthentication.Decrypt( HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
testDiv.InnerHtml += "Expires: " + ticket.Expiration.ToString("yyyy-MM-dd HH:mm:ss");

if(Response.Cookies.AllKeys.Contains(FormsAuthentication.FormsCookieName))
testDiv.InnerHtml += "<br />Forms auth is trying to update the cookie in this response";

}
protected void Page_Prerender(object sender, EventArgs e)
{
if (Response.Cookies.AllKeys.Contains(FormsAuthentication.FormsCookieName))
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
}

Page_Prerender 事件会从响应中删除 FormsAuthentication cookie(如果存在),从而防止滑动。

我通过将 FormsAuthentication 的超时设置为两分钟来对此进行测试。然后我开始调试并登录。然后我不断刷新有问题的页面。

由于 FormsAuthentication 除非过期时间已过一半,否则不会更新 cookie,因此在第一分钟内,页面将继续显示相同的加密 cookie 和相同的过期时间。一分钟多一点后,页面将报告 FormsAuthentication 正在尝试更新 cookie。但是 Page_Prerender 会删除 cookie,因此它不会被发送。一分钟后,您将被重定向到登录页面。

测试相同但删除 Page_Prerender 方法表明 cookie 已更改,并且过期时间在大约一分钟后更新。

关于asp.net - 防止 FormsAuthentication 过期时间增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33632509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com