Статический класс будет обслуживать одно и то же содержимое во всех зарегистрированных сеансах.
Избегайте использования статических классов в веб-приложении, если вы не полностью понимаете, как оно будет работать.
Опция 1:
Вы можете указатьзначения в сеансе, как показано в вашем примере кода.Преимущество в том, что вам не нужно писать какую-либо оболочку.
Недостатком является то, что кто-то будет продолжать добавлять любое значение в сессию, и после того, как ваше приложение будет расти, никто не будет знать, какие данные вы храните в сессии.
Опция 2 :
ИЛИ вы можете создать один класс для хранения всех значений сеанса вместе.Всякий раз, когда вы хотите прочитать значение сеанса, всегда читайте из этого класса.
Пометьте этот класс как сериализуемый, чтобы в будущем, если вы захотите сохранить состояние сеанса в SQL Server или на каком-либо другом сервере, например, в кэше REDIS, он будетпросто будьте минимальными изменениями конфигурации.
Таким образом, вы всегда будете знать, какие все значения вы задали в сеансе.
Например,У вас может быть класс для хранения всех ваших значений сеанса
[Serializable] //// This is required when using out of proc session state
public class MySessionState
{
public string Username {get; set;}
public string Role {get; set;}
public string FirstName{get; set;}
public string LastName {get; set;}
public int Age{get; set;}
}
Создайте ключ const для ссылки на этот объект класса
public const string MySessionObjectKey = "mysessionstate";
Затем в действиях вашего контроллера выможно использовать это так:
public void MyAction()
{
var sessionState = Session[MySessionObject] as MySessionState;
if (sessionState == null)
{
sessionState = new MySessionState();
}
sessionState.FirstName = "SomeName";
sessionState.LastName = "SomeOtherName";
/// Process this session object
Session[MySessionObjectKey] = sessionState;
}
Надеюсь, это поможет вам.