Обхватът на публичната променлива за всички сесии ли е или всяка сесия има свое копие на променлива?

Ако декларирам променлива като публична в уеб страница, тази променлива може ли да съдържа една и съща стойност между различни сесии или всяка сесия има свое копие?

И ако да, задържа се между сесиите, как да се предотврати това? има ли атрибут за деклариране като за копие на една сесия?

Може би въпросът е глупав? но нещо съм объркан..


person Amr Elgarhy    schedule 01.11.2009    source източник


Отговори (4)


Променливата е достъпна само за една заявка, освен ако не я съхраните в сесията или кеша. Ако е публичен, той ще бъде достъпен за други обекти, създадени по време на заявката, но само за обектите, свързани със заявката. Ако го декларирате и като статичен, тогава той ще бъде наличен през целия живот на приложението -- но това звучи като нещо, което не искате, така че просто избягвайте да го правите.

person tvanfosson    schedule 01.11.2009
comment
така че ако е статичен, ще продължи да държи същата стойност между различни сесии? - person Amr Elgarhy; 01.11.2009
comment
Да, ако е статичен, той ще има същата стойност за целия жизнен цикъл на приложението. Но защо искате да декларирате статични променливи на страница? - person SharePoint Newbie; 01.11.2009
comment
Не искам в самата страница, но може да е в клас, който страницата извиква - person Amr Elgarhy; 01.11.2009
comment
Ако искате една и съща стойност да се запази в сесиите: ‹br /›1. Поставете го в някакъв static/singleton. Поставянето му на страницата е лоша идея. ‹br /›2. Поставянето му в singleton/static е лошо, тъй като ще умре с процеса, така че използвайте DB. - person SharePoint Newbie; 01.11.2009
comment
Не искам да го запазя, например, ако декларирах sqlconnection като статичен, искам да знам дали всички ще имат достъп до едно и също копие или не и кога ще умре? - person Amr Elgarhy; 01.11.2009
comment
Ако искате данните да се запазват между сесиите за един потребител, трябва да ги съхранявате в база данни и да ги извличате и поставяте в сесията всеки път, когато потребителят влезе (в зависимост от размера и т.н.) Ако това са глобални данни (за всички потребители) може да искате да го запазите в база данни и да го съхраните в общия кеш. Единичен клас само за съхраняване на данни всъщност не се различава от кеша, освен че не е толкова функционален. Използването на кеша позволява автоматичното премахване на данните, когато са остарели с механизми за презареждане, ако е необходимо. - person tvanfosson; 01.11.2009
comment
Създайте отново SQL връзки, ако е необходимо. Не ги дръжте наоколо. Мениджърът на пула за връзки ще се погрижи за споделянето на връзката и живота. Вашето приложение не трябва да прави това. - person tvanfosson; 01.11.2009
comment
Можете също така да кажете на ASP.Net Cache да използва SQL като резервно хранилище. Можете да се абонирате за съответното събитие, за да знаете кога вашият обект е премахнат от кеша. - person SharePoint Newbie; 01.11.2009

Обхватът на променливата няма нищо общо със стойностите, които се съхраняват между сесиите.

public scope просто означава, че променливата може да се види от всеки друг код във вашето приложение.

Ако искате обектът да може да се съхранява в сесии, трябва да го съхраните в сесията.

person Joseph    schedule 01.11.2009

  1. Всяка страница е екземпляр на класа WebPage, който се унищожава и създава отново при всяка заявка.
  2. Сакът на сесията е уникален за сесията и не се споделя между различни сесии. Той съхранява само неща, които добавяте към него.

1 + 2 = Не. Самото добавяне на публично поле към страница не я добавя към сесията. Една и съща стойност не се запазва между сесиите.

Можете ли да ни кажете точния проблем, с който се сблъсквате?

person SharePoint Newbie    schedule 01.11.2009

Единственият начин за споделяне на данни между сесиите е чрез съхраняването им в база данни или в променливи на приложение.

person Justin Rusbatch    schedule 01.11.2009