使用 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>
(请注意这是一个示例密钥。您必须生成一个密钥并添加到您的配置中)
我一直在创建一个 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>
(请注意这是一个示例密钥。您必须生成一个密钥并添加到您的配置中)