Статические свойства с сессией в ASP.NET - PullRequest
0 голосов
/ 23 июня 2011

Есть несколько сообщений об этом в Интернете, но ни один, кажется, не дает однозначного ответа.У меня вопрос такой.Если у меня есть статические свойства, объявленные, что только получение / установка значений Session является безопасным для потока или это может вызвать проблемы?В моем приложении я добавил статические свойства в свой Global.asax, чтобы он служил своего рода центральной точкой входа для доступа к определенным значениям, например, я храню текущего клиента так:

public static string CurrentClient {
    get {
      return HttpContext.Current.Session[Constants.SESSION_CURRENT_CLIENT] as string;
    }
    set {
      HttpContext.Current.Session[Constants.SESSION_CURRENT_CLIENT] = value;
    }
}

Обратите внимание, как яне устанавливая статические переменные в моем get / set, я просто ссылаюсь на текущий сеанс.

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

client1.mydomain.com установит:

Global.CurrentClient = "client1";

client2.mydomain.com установит:

Global.CurrentClient = "client2";

Кажется, это должно работатьхорошо, и потокобезопасен, и эти два субдомена не будут перебиваться друг с другом, потому что каждый из них должен иметь уникальные сеансы, но это именно то, что, кажется, происходит.Я получаю запросы к client1.mydomain.com с использованием CurrentClient = "client2" по некоторым причинам.

Что здесь происходит, банда?

1 Ответ

0 голосов
/ 23 июня 2011

У вас, кажется, плохой случай статической фобии.Вы не должны слушать людей, которые распространяют FUD только потому, что они не понимают, что они делают.

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

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

Что приводит к тому, что ваши сеансы "перепутаны", вы уверены, что cookie-файл сеанса установлен на правильном уровне?Если вы установите его на уровне mydomain.com, он будет доступен для всех поддоменов.Кроме того, вы уверены, что это необходимо хранить в сеансе?Разве не проще всего сравнивать текущий домен со списком клиентов по каждому запросу?

...