我昨天在想如何解决这个问题,因为我提供或检查用户的所有内容都取决于他的ProviderUserKey(ID)。
所以我做了一个像
这样的静态函数public static Guid GetUserID()
{
string UserID = string.Empty;
if(HttpContext.Current.Session["UserID"] != null)
{
UserID = HttpContext.Current.Session["UserID"].ToString();
}
if(!string.IsNullOrEmpty(UserID))
{
return new Guid(UserID);
}
UserID = Membership.GetUser().ProviderUserKey.ToString();
HttpContext.Current.Session["UserID"] = UserID;
return new Guid(UserID);
}
此类的要点是减少数据库连接以检查/获取用户ID。
我的这个功能的问题不在于这不起作用,我的问题是如果登录用户注销并使用其他帐户登录?
或者在登录时添加会话值并在注销时清除会话值是否更好?
在哪里可以看到此类“获取用户ID”的任何其他问题?
答案 0 :(得分:0)
您是否尝试过使用ProfileProvider?
您可以使用和使用特殊属性进行自定义,并且每个用户都可以通过会话进行管理。
获取值的示例:
HttpContext.Profile.GetPropertyValue["CustomProperty"]
在此视频中,您可以精益实施,创建,配置和使用......
http://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-a-custom-profile-provider
答案 1 :(得分:0)
如果您将用户注销,那么您也应该终止该会话。 当您以其他用户身份登录时,您也可以重新初始化会话。
请注意,您希望保持会话并形成身份验证超时(假设您使用表单身份验证)彼此同步:
How can I handle forms authentication timeout exceptions in ASP.NET?
这应该有助于使会话与表单身份验证令牌保持一致。您将需要在注销时终止会话并在登录时初始化它。
另一种方法是实现您自己的成员资格提供程序,缓存此密钥以防止持续的db命中。