gpt4 book ai didi

c# - 如何禁用 ASP.NET 的自动注销功能

转载 作者:行者123 更新时间:2023-11-30 20:57:30 25 4
gpt4 key购买 nike

我使用 ASP.NET 成员资格 API。这会自动注销非事件 session 。我不想要这个自动注销。我使用了一些解决方法,比如在指定的时间后调用 ajax 中的页面。或者我使用 iframe 方法使 session 保持事件状态。但这并不能很好地满足我的需求。我想完全禁用此注销功能。

注意事项 我的问题是对这篇文章的回应 This

增加 session 超时并不总是有效

乍一看,在 C# ASP .NET 的 web.config 文件中增加 session 超时值应该可以解决问题。您会假设通过将下行中的超时值更改为 60 分钟,用户将在 web 应用程序 session 中保持登录状态整整 60 分钟。

<authentication mode="Forms">
<forms name="MyAuth" timeout="60" protection="All" loginUrl="~/Web/Login.aspx" slidingExpiration="true" />
</authentication>

<sessionState mode="InProc" cookieless="false" timeout="60" />

然而,这实际上有两个问题。第一个问题是,将超时值设置为任何大于 1 小时的值都会导致服务器上占用过多的内存,因为 IIS 在 session 期间占用所有 session 内存。想象一个高流量站点的超时值为 5 小时,保存数千个用户 session 的所有 session 数据。第二个问题可能出现在测试应用程序时,Web 应用程序通常会在仅 15 分钟后超时。究竟发生了什么?虽然问题实际上可能是在 IIS 中为 session 超时或连接超时属性配置的值(在共享主机的情况下,您甚至可能无法访问),但很明显我们需要控制 session 超时我们自己的双手。

最佳答案

将身份验证 cookie 设置为 not ends 风险太大。

为什么,因为任何人在任何时候都可以使用任何生成的经过身份验证的 cookie 再次登录。

要了解更多信息,您可以阅读 that article :The FormsAuthentication.SignOut method does not prevent cookie reply attacks in ASP.NET applications"

并查看一些相关问题,Form Authentication - Cookie replay attack - protectionFormsAuthenticationTicket cannot be invalidated server side. Causing cookie reply attacks

一个解决方案是使用一个处理程序和一个简单的 javascript 来调用它并时常更新登录 session 。

html/javascript 部分:

<img id="LiveImg" width="1" height="1" alt="" src="keepsessionalive.ashx?" /> 
<script>
var myImg = document.getElementById("LiveImg");
if (myImg){
window.setInterval(function(){
myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());
}, 3000);
}
</script>

keepsessionalive.ashx 可以包含:

// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};

public void ProcessRequest (HttpContext context)
{
// send the emtpy image
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}

如果您还想保持 session 事件,连同身份验证,请在您的处理程序上使用 IRequireSessionState

在每次调用时,身份验证凭据将更新并且您的 session 将保持 - 如果用户出于任何原因离开,cookie 将过期并且您可以避免可能的重播攻击。

我还在这个类似的答案中介绍了自动重新加载图像的技巧:
Keeping a related ASP.NET application's session alive from another ASP.NET application
Reset session timeout without doing postback in ASP.Net
What is the best approach to handle session timeouts in asp.net
Auto refresh ASP.NET web page after defined interval?

关于c# - 如何禁用 ASP.NET 的自动注销功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778256/

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