User-8621695 Ответов: 1

Как я могу обрабатывать статические данные каждого пользователя, не влияя на других?


Привет,
У меня есть приложение web api. Я создал статический класс с некоторыми статическими свойствами в этом приложении, которое хранит несколько значений файлов cookie. Теперь мой вопрос заключается в том, что если 4 пользователя используют одновременно этот api (используя 4 вкладки в одном браузере), то будут ли данные user1 заменены пользователем 2/3/4?
Если да, то каков предпочтительный способ хранения этих данных? Я использую Autofac DI.
Благодарю

Что я уже пробовал:

Я пытался создать глобальную переменную и каждый раз создавать объект этого класса

1 Ответов

Рейтинг:
6

OriginalGriff

Статические данные-это статическое. Существует одна копия для всего приложения (аналогично глобальным переменным в других языках).

Если ваши статические данные содержат информацию о конкретном пользователе, они не будут работать, потому что они не могут содержать различную информацию в зависимости от того, какой пользователь "активен" в приложении.

Не обращайте внимания на компьютеры и давайте поговорим о машинах.
Все автомобили имеют свой цвет, но какой именно, зависит от того, о каком конкретном автомобиле вы говорите. Моя машина черная, ваша-красная, эта-зеленая, та - синяя. Цвет - это свойство экземпляра класса Car, потому что вам нужен конкретный экземпляр автомобиля, чтобы задать вопрос: "какого он цвета?" - вы не можете сказать: "какого цвета автомобиль?" потому что это бессмысленно, не говоря, какую машину вы имеете в виду.
Но у автомобилей есть и статические свойства: вы можете спросить: "сколько колес у автомобиля?" потому что у всех машин четыре колеса. (Если бы их было двое, то это был бы мотоцикл, а не автомобиль!)

Как только вы начнете распространять статические данные, скорее всего, ваш дизайн ошибочен: хорошо разработанное приложение часто будет иметь мало или вообще не будет иметь статических данных - возможно, строку подключения к БД, возможно, URL-адрес веб-сайта. Но если вы начнете хранить информацию о конкретном пользователе в статических данных, то это почти наверняка неправильно и вызовет у вас проблемы.

Я бы вернулся к вашему дизайну и выяснил, почему вы считаете, что эти данные должны быть static - а если та причина есть "так это static метод может получить к нему доступ", то вам нужно посмотреть на "почему этот метод static вообще?", а не "как я могу получить данные экземпляра в static метод?".
static методы должны работать только с данными, которые не связаны с экземпляром или могут быть отделены от любого конкретного экземпляра и переданы методу через параметры.


User-8621695

@OriginalGriff большое вам спасибо за то, что вы развеяли мои сомнения относительно статических классов и того, какие данные мы должны хранить статическим способом.
Теперь я сомневаюсь, что нам нужно хранить данные cookies, которые будут отличаться для каждого пользователя и могут быть обновлены где-то в середине запущенного приложения, что я должен использовать?

OriginalGriff

Печенье? Они хранятся на клиенте, а не в вашем приложении!

User-8621695

да, правильно, но есть несколько данных, которые мы храним в файлах cookie, которые также должны храниться на нашем прикладном уровне.

OriginalGriff

Нет, это не так. Вы извлекаете их из клиента в локальные переменные, когда они вам нужны, вы не сохраняете их в своем приложении, потому что вы даже не можете гарантировать, что приложение будет запущено через две минуты.
Каждый раз, когда клиент делает сообщение на сервер, это похоже на то, как если бы приложение было запущено в первый раз - вы не можете полагаться ни на что существующее из предыдущих сообщений, если они не хранятся в сеансе, - и это истекает через 20 минут при нормальных обстоятельствах!
Вы, конечно, никогда, никогда не должны использовать статические данные на веб - сайте - вы понятия не имеете, сколько разных клиентов будут "делиться" ими- может быть, только один, может быть, десятки!

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