Контроль пользователей и управление сессиями - PullRequest
1 голос
/ 27 февраля 2012

Я разработал контроль вложений для своей команды.Элемент управления находится в отдельном проекте.

Я помещаю эти вложения (документы) в сеанс всякий раз, когда загружаю файлы в пользовательский элемент управления своего вложения. Только когда я сохраняю, я получаю эти вложения отсеанс и сохранить в БД.

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

Как мне справиться с этим?Использование сессии является плохим вариантом?Я не знаю, куда поместить эти вложения, прежде чем я сохраню.

Любое предложение было бы здорово для меня.

Заранее большое спасибо.

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Вы должны использовать состояние просмотра (или состояние элемента управления) для отслеживания состояния элемента управления.Это позволяет использовать одни и те же ключи для пакета состояния в нескольких экземплярах одного и того же элемента управления.В вашем случае вы должны хранить фактическое содержимое документа (файл) во временном настраиваемом каталоге со случайным уникальным именем (например, guid) и сохранять это случайное имя и оригинальное имя (и дополнительные атрибуты, если таковые имеются) в состоянии просмотра.При сохранении переместите содержимое из файловой системы в БД (и удалите эти файлы).

Если вы не хотите слишком сильно изменять существующий код, вы можете продолжать использовать Session в качестве хранилища, но генерировать сеансключ для каждого элемента управления.Например, если вы используете "MyFile" в качестве ключа для сеанса, затем начните использовать "MyFile_" + Control.ClientID в качестве ключа для данных сеанса - это позволит вам иметь несколько экземпляров на страницу.
Более надежный способ для ключа сеанса будетгенерировать уникальный ключ (guid) в каждом экземпляре элемента управления и сохранять этот ключ в состоянии просмотра.

0 голосов
/ 27 февраля 2012

Прежде всего, хранение данных в памяти, вероятно, не очень хорошая идея, потому что в зависимости от сценария это может сильно увеличить объем используемой памяти.Например, вы можете вместо этого сохранить их во временной папке или в базе данных, но пометить их как не сохраненные.Вы можете использовать некоторый идентификатор, чтобы различать разные вложения в разных сеансах (например, создать подпапку с именем, подобным SessionID, или использовать таблицу со столбцами SessionID, FileName, Data или аналогичными).Таким образом, возможно, проще обрабатывать несколько вложений: если пользователь загружает файл, просто добавьте его в папку / таблицу.Чтобы получить список всех загруженных вложений, перечислите все файлы в папке SessionID или перечислите все строки базы данных с соответствующим столбцом SessionID.

Это всего лишь грубый набросок, поскольку я не знаю вашего точного сценария или требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...