Я рассматриваю шаблон проектирования, который использовался во многих проектах моей фирмы. Исторически он функционировал правильно, однако я слышал, как некоторые другие разработчики утверждали, что при использовании этого шаблона существует вероятность повреждения сеанса. Я ищу информацию от других разработчиков .NET здесь, в Stack Overflow.
По сути, есть класс — обычно либо static
, либо шаблон Singleton, в основном в зависимости от разработчика, который его написал, — хранящийся в App_Code
.
Этот класс инкапсулирует доступ к текущему сеансу через свойства. Все эти свойства принимают форму:
public static class SessionHelper
{
public static string SessionValue
{
get
{
object o = HttpContext.Current.Session["sessionValueName"];
if (o == null)
{
// Replace the following with code to store & retrieve
// a default value of the appropriate datatype.
o = string.Empty;
HttpContext.Current.Session["sessionValueName"] = o;
}
return o.ToString(); // or cast, ensure cast is valid & return.
}
set
{
HttpContext.Current.Session["sessionValueName"] = value;
}
}
// Other properties, strongly-typed, as above.
}
(Они не являются статическими, если класс является синглтоном.)
Я видел проблемы со статическими данными на веб-сайтах в прошлом, в основном из-за того, что статические данные использовались для поддержания состояния для каждого сеанса. (Например, я видел статически объявленных «на пользователя» членов кода программной части. Это не мой код; моя команда была командой по очистке для компании, которая написала этот беспорядок.)
Однако, поскольку это всего лишь статическая запись в HttpContext.Current.Session
, кажется, что она должна быть безопасной, поскольку принципиально ничем не отличается от класса Page
, инкапсулирующего это в свойстве Session
. Как я уже сказал, ни на одном другом сайте, над которым работала моя компания и который использовал этот шаблон, не было никаких проблем, включая довольно большие и очень активные базы пользователей. Но я хочу просто получить свежий взгляд.
Существуют ли потенциальные проблемы с несколькими пользователями, условия гонки или другие сбои/недостатки, которые конкретно могут вызвать повреждение сеанса в приведенном выше шаблоне?