C# 是否将GUID用作会话密钥?
基本上,我有一个跨多个页面持久化的对象,所以我使用会话来保存和检索该对象。我正在为会话密钥使用GUID。我使用静态构造函数来创建GUID 以下是该对象的一个示例:C# 是否将GUID用作会话密钥?,c#,asp.net,session,guid,C#,Asp.net,Session,Guid,基本上,我有一个跨多个页面持久化的对象,所以我使用会话来保存和检索该对象。我正在为会话密钥使用GUID。我使用静态构造函数来创建GUID 以下是该对象的一个示例: class Customer { private static readonly string _sessionKey; public static string SessionKey { get { return _sessionKey; } } static Custom
class Customer
{
private static readonly string _sessionKey;
public static string SessionKey
{
get { return _sessionKey; }
}
static Customer()
{
_sessionKey = Guid.NewGuid().ToString();
}
}
然后我在代码中使用它,如下所示:
Session.Add(Customer.SessionKey, new Customer());
我个人更喜欢这种方法,而不是会话键的
常量字符串
或字符串
文本。只是想知道这样做是否有坏处,或者您使用了哪些其他方法?为什么这样做?您应该只定义常量,然后使用它。如果您在会话
中迭代或使用调试器为什么这样做?您应该只定义常量,然后使用它。如果您对会话
迭代或使用调试器(如果会话中有客户
对象-以常量名称保存),则说明不够。否则考虑保存<代码>客户> /COD>常量名称下的对象。< /P>
注意:如果您计划使用其他状态提供程序(SQL/状态服务)而不是内存中的默认状态提供程序,请确保您的
Customer
对象是可序列化的,并且在请求之间是有意义的。如果会话中有Customer
对象-以常量名称保存。否则考虑保存<代码>客户> /COD>常量名称下的对象。< /P>
注意:如果您计划使用其他状态提供程序(SQL/状态服务)而不是内存中的默认值,请确保您的
Customer
对象是可序列化的,并且在请求之间是有意义的。如果密钥不是静态的,也就是说,如果会话中存储了多个Customer
,这似乎更有意义。此外,这个问题可能更适合。如果您移动到负载平衡环境,使用新的GUID作为密钥确实会失败。如果您要将会话密钥存储为静态变量,为什么不将客户
对象存储为静态变量呢?如果密钥不是静态的,这似乎更有意义,即,如果会话中存储了多个客户
。此外,这个问题可能更适合。如果您移动到负载平衡环境,使用新的GUID作为密钥确实会失败。如果要将会话密钥存储为静态变量,为什么不将客户
对象存储为静态变量?
Customer C = Session[Customer.SessionKey] as Customer;