在mvc应用程序中在短时间内注销

时间:2014-12-02 13:37:33

标签: asp.net-mvc

我有一个ASP.NET MVC应用程序,我收到了用户的抱怨,他们在相对较短的时间后就已经注销了。

我在web.config中有以下设置,但显然它不起作用。

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

知道为什么这不起作用吗?

2 个答案:

答案 0 :(得分:0)

我认为您遇到与here

相同的问题

因此,您应该将机器密钥放在Web.Config中。例如:

<configuration> 
    <system.web> 
        <machineKey decryptionKey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2,IsolateApps" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45,IsolateApps" /> 
    </system.web> 
</configuration>  

您可以了解如何生成机器密钥herehere

答案 1 :(得分:0)

如果您希望用户在他/她的浏览器打开之前保持登录状态,我会做一个技巧。我创建一个Action或任何处理程序,如下所示,它只返回一些虚拟文本(例如:context.User.Identity.IsAuthenticated),然后使用jQuery.get来请求它。我保持用户登录,因为浏览器会发送请求:

处理程序:

public class KeepAlive : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write(context.User.Identity.IsAuthenticated);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

MVC行动:

public bool KeppChecking()
{
    return User.Identity.IsAuthenticated;
}

jQuery的:

setInterval(function () {
    $.get('/Ajax/KeepAlive.ashx');
}, 10000);