我有一些关于 SL 身份验证的问题。
我正在使用 WCF RIA 服务来访问数据库并实现身份验证以及将数据读/写到数据库。现在,我有自定义身份验证服务和自定义角色提供程序(因为没有最后一个数据库返回异常)。在 Roles Provider 类中,我只实现了一种方法“ IsUserInRole(string username, string roleName) ”。我不知道为什么,但项目没有使用所有其他方法。
1.在web.config文件中,我有一个关于身份验证的文本:
<authentication mode="Forms">
<forms name=".ASPXAUTH" timeout="1440"/>
</authentication>
我设置了超时 1440(身份验证 cookie 的过期日期为 +30 天)。但无论如何,应用程序在空闲 6-7 分钟内失去了身份验证。为什么???此外,我在托管设置中没有发现任何类似的偏好。
2.现在,通过 Fiddler 2 我可以看到奇怪的 cookie 设置(仅在获取数据库信息时):
Set-Cookie: .ASPXROLES=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly
我试图找到哪个类或方法放置了这个 cookie,但我什么也没找到。就像“幻像”cookie -_-...我认为,这是我身份验证超时的主要问题之一。它是什么,我该如何改变它?
3.我找到了很好的解决方案(Silverlight RIA Services - How To Best Handle Client Auth Session Timeout?),但它只能帮助我捕获异常。如果我使用下一个方法:
WebContext.Current.Authentication.LoadUser(Application_UserLoaded, null);
在应用程序启动时,一切似乎都很好,并且用户身份从 cookie 中加载。但!如果我在空闲 6-7 分钟后尝试使用此方法,应用程序会以神奇的方式将导航页面更改为“LoginPage”。我不知道也不知道它是如何做到的。但这是真的。我在“桌面”页面。然后我尝试在空闲后“重新登录”用户,将框架更改为不同的页面,并且所有数据(来自上一页)都丢失了...... :(那么,为什么“LoadUser”方法让我使用登录窗口进入不同的页面,为什么它不只是重新登录用户身份?