C# 是否将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

基本上,我有一个跨多个页面持久化的对象,所以我使用会话来保存和检索该对象。我正在为会话密钥使用GUID。我使用静态构造函数来创建GUID

以下是该对象的一个示例:

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;