使用 WebAPI 的表单身份验证在 5 分钟后过期

Form Authentication with WebAPI expires after 5 minutes

我一直在创建一个 Web 项目,我在其中使用表单身份验证,使用 cookie 来验证用户是否正在身份验证。

一切正常,但是当我在共享主机上托管它时,会话在 5 分钟不活动后过期。我已将配置中的超时设置为 60 分钟。

<authentication mode="Forms">
            <forms name=".auth" protection="All" timeout="60"/>
        </authentication>

在登录时,我创建了一个名为 login 的 API,我正在其中设置身份验证。

FormsAuthentication.SetAuthCookie(".auth", false);

然后我检查用户是否在网络中经过身份验证 API 并且我的 API 看起来像。

    [Authorize]
    [RoutePrefix("api/value")]
    public class ValueController : ApiController
    {
        // GET api/value
        [Route("get")]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

    }

我知道这是一种非常 old/bad 通过 cookie 进行验证的方法,但这是我的旧应用程序,我无法更改身份验证结构并使用 Owin。

任何人都可以提出为什么在共享主机上闲置 5 分钟后它会过期吗?它在我的本地 IIS 上运行正常,并且在 60 分钟之前不会过期。

请求帮助。

原因是托管服务提供商清除了会话,解决方法是在web.config中添加machineKey。

<system.web>
    <machineKey decryption="AES" decryptionKey="ddE3434J4K3J3KLNDFPSODIFSFLKJW34L3OIUF" validation="HMACSHA256" validationKey="07dfdDUIEJSLDJFKLSJFEIOUR3989F8SDF90DF9D0F9DF9SD0F90SDF09SD0F9DF" />
</system.web>

(请注意这是一个示例密钥。您必须生成一个密钥并添加到您的配置中)