我总是将用户的数据(登录后)存储在会话变量中,所以我可以在任何页面上使用这些数据。
我发现另一种全局存储信息的方法是使用{ get; set;}将其存储在类中,然后从任何页面调用这些信息。
现在,我使用了这两种方法作为测试,它们都很好地工作:
Session["LoginId"] = rdr["uniqueIdentifier"].ToString();
和
Member.LoginId = rdr["uniqueIdentifier"].ToString();
Where (在Member.cs)
public class Member
{
public static int Challenges { get; set; }
public static int NicknameId { get; set; }
public static string LoginId { get; set; }
public static string FriendsListId { get; set; }
public static void ClearVariables()
{
Challenges = 0;
NicknameId = 0;
LoginId = null;
FriendsListId = null;
}
}Global.asax
void Session_End(object sender, EventArgs e)
{
Member.ClearVariables();
}我的问题是,在这样的类中存储用户数据是否足够安全,还是应该继续使用Session对象?
为了完整,更新了,这篇文章会像上面那样做吗,但是对多个用户呢?How to access session variables from any class in ASP.NET?
发布于 2012-10-23 07:44:34
我发现这种方法是最容易使用和机会最少的方法之一。我认为这就是所谓的外观设计模式。
public class SiteSession
{
#region Attributes
private static string _siteSession = "__SiteSession__";
#endregion
#region Constructor
private SiteSession()
{
}
#endregion
#region CurrentSession
public static SiteSession Current
{
get
{
SiteSession session = HttpContext.Current.Session[_siteSession ] as SiteSession;
if (session == null)
{
session = new SiteSession();
HttpContext.Current.Session[_siteSession ] = session;
}
return session;
}
}
#endregion
#region SessionProperties
public sherserve.CustomTypes.UserTypes UserType { get; set; }
public int UserID { get; set; }
public String StaffID { get; set; }
public String Position { get; set; }
public String StaffName { get; set; }
public int TimeZone { get; set; }
public String DealerId { get; set; }
public String DealerPosition { get; set; }
public String DealerName { get; set; }
public int DealerFirmId { get; set; }
public String ClientId { get; set; }
public String ClientName { get; set; }
public String ClientBusiness { get; set; }
public String CountryCode { get; set; }
public int ClientFirmId { get; set; }
#endregion
}值可以存储在以下会话中:
SiteSession.Current.UserType = user.UserType;并且可以这样获得:
int userId= SiteSession.Current.UserID;它也是类型安全的。
发布于 2012-10-23 06:18:33
在您的示例中,这一点都不安全,因为asp.net中的静态变量对所有用户都是通用的。
发布于 2012-10-23 06:19:38
使用静态变量是不安全的。为一个用户设置的值将覆盖另一个用户的值。
静态变量意味着只为所有会话创建和使用一个变量。静态变量的生命周期是应用寿命。
如果您的变量是特定于用户的(看起来是这样的),那么您需要坚持使用会话变量。
https://stackoverflow.com/questions/13024516
复制相似问题