Действительно ли безопасно получить доступ к переменным сеанса asp.net через статические свойства статического объекта?

Действительно ли безопасно получить доступ к переменным сеанса asp.net через статические свойства статического объекта?

Вот то, что я имею в виду:

public static class SessionHelper
{
    public static int Age
    {
        get
        {
            return (int)HttpContext.Current.Session["Age"];
        }

        set
        {
            HttpContext.Current.Session["Age"] = value;
        }
    }


    public static string Name
    {
        get
        {
            return (string)HttpContext.Current.Session["Name"];
        }

        set
        {
            HttpContext.Current.Session["Name"] = value;
        }
    }
}

Действительно ли возможно, что Усера мог получить доступ к данным сессии userB этот путь?

21
задан Ronnie Overby 10 May 2010 в 16:08
поделиться

2 ответа

Да, это нормально - просто убедитесь, что вы не этого делаете:

public static class SessionHelper
{

    private static HttpSession sess = HttpContext.Current.Session;
    public static int Age
    {
        get
        {
            return (int)sess["Age"];
        }

        set
        {
            sess["Age"] = value;
        }
    }
}

Как видно из этого способа, вы показываете данные сеанса одного пользователя другому пользователю. (Хотя в ASP.NET 1.1)

30
ответ дан 29 November 2019 в 20:48
поделиться

ИМХО, это действительно хороший подход. Это типобезопасный вариант, добавьте абстракцию уровня, которая позволит вам изменять вещи с минимальным воздействием.

Пример того, что вы можете изменить: если вы решили, что какое-то состояние должно переместиться в кэш или даже в базу данных в сочетании с кешированием, это потребует дополнительной синхронизации потоков, но все это может быть обработано внутренними компонентами этого класса. Вы можете подумать об изменении имени класса на что-то менее специфичное для сеанса.

Единственный комментарий, который я хотел бы сделать к вашему конкретному примеру, заключается в том, что вы должны проверить, что переменная сеанса не равна null , и либо вернуть соответствующее значение по умолчанию, либо подтвердить, либо вызвать информативное исключение, если это так. На всякий случай свойство читается перед установкой.

8
ответ дан 29 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: