Это правильный способ сохранить и восстановить сеанс в asp.net - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу создать класс для извлечения данных из состояния сеанса, действую следующим образом, это правильный путь?

Я создал статический класс и статические методы для получения данных

[AuthorizeMember]
public class TestController : Controller
{
    public ActionResult list()
    {
        Session["memberid"] = 12345;
        return View();
    }

    public ActionResult iteminfo(string prodcode)
    {
        int memberid=SessionData.MemberTableId();
    }
}

public static class SessionData
{
    public static int MemberTableId()
    {
        return Convert.ToInt32(HttpContext.Current.Session[memberid]);
    }
}

1 Ответ

0 голосов
/ 19 февраля 2019

Статический класс будет обслуживать одно и то же содержимое во всех зарегистрированных сеансах.

Избегайте использования статических классов в веб-приложении, если вы не полностью понимаете, как оно будет работать.

Опция 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;
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...