хранить ваши сессии на сервере SQL

ользую Yahoo Uploader, часть библиотеки пользовательского интерфейса Yahoo, на своем веб-сайте ASP.Net, чтобы пользователи могли загружать файлы. Для тех, кто незнаком, загрузчик работает с помощью апплета Flash, чтобы дать мне больше контроля над диалогом FileOpen. Я могу указать фильтр для типов файлов, разрешить выбор нескольких файлов и т. Д. Это здорово, но имеет следующие задокументированные ограничения:

Из-за известной ошибки Flash загрузчик, работающий в Firefox в Windows, не отправляет правильные файлы cookie при загрузке; вместо отправки файлов cookie Firefox он отправляет файлы cookie Internet Explorer для соответствующего домена. В качестве обходного пути мы рекомендуем использовать метод загрузки без файлов cookie или добавить document.cookie к запросу на загрузку.

Поэтому, если пользователь использует Firefox, я не могу полагаться на куки, чтобы сохранить их сеанс при загрузке файла. Мне нужна их сессия, потому что мне нужно знать, кто они! В качестве обходного пути я использую объект Application таким образом:

Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);

Итак, я создаю уникальный идентификатор и использую его как ключ для храненияPage.User объект в области применения. Я включаю этот идентификатор в качестве переменной в POST при загрузке файла. Затем в обработчике, который принимает загрузку файла, я получаю объект User таким образом:

IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];

Это на самом деле работает, но у него есть два явных недостатка:

Если IIS, пул приложений или даже просто приложение перезапускается между временем, когда пользователь заходит на страницу загрузки и фактически загружает файл, его «uploadid» удаляется из области приложения, и загрузка завершается неудачно, потому что я не могу их аутентифицировать ,

Если я когда-нибудь масштабируюсь до сценария веб-фермы (возможно, даже веб-сада), это полностью сломается. Я могу не беспокоиться, если не планирую масштабировать это приложение в будущем.

У кого-нибудь есть способ получше? Есть ли способ передать фактический идентификатор сеанса ASP.Net в переменную POST, а затем использовать этот идентификатор на другом конце для получения сеанса?

Я знаю, что могу получить идентификатор сеанса черезSession.SessionIDи я знаю, как использовать YUI, чтобы опубликовать его на следующей странице. То, что я не знаю, как это использоватьSessionID захватить сеанс с государственного сервера.

Да, я использую сервер состояний для хранения сеансов, поэтому они сохраняют перезапуски приложений / IIS и будут работать в сценарии веб-фермы.

Ответы на вопрос(4)

Ваш ответ на вопрос