Как получить данные сеанса без HttpContext.Current по SessionID

Я ищу способ чтения и записи данных сеанса, но без наличия HttpContext. Текущий.

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

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

Итак, есть ли способ прочитать данные сеанса, зная только идентификатор сеанса.

Я сохраняю сеанс на сервере SQL и вижу их. он есть в таблице ASPStateTempSessions :)

Как я могу читать их "офлайн" и манипулировать ими?

Заранее благодарю.,


person Aristos    schedule 05.05.2010    source источник


Ответы (2)


Все еще не совсем понятно, почему вы можете захотеть это сделать, но вам может и не понадобиться делать это в Session_End(). В этот момент вам может быть уже слишком поздно работать с данными сеанса (я уже читал об этом несколько статей). Что может быть лучшим решением, так это пытаться работать с данными сеанса, когда ваше приложение действительно имеет контекст.

Например:

Ничто не мешает вашему приложению создавать асинхронный запрос в новом потоке в фоновом режиме (или даже в другом приложении, таком как служба Windows, например), когда конкретная переменная сеанса, которую вы хотите, обновлена ​​или установлена. Таким образом, ваше приложение сможет получить доступ к текущему HttpContext, а также ко всем данным сеанса.

Не уверен, что это поможет, но попробовать стоило ;)

Ричард.

person Richard    schedule 05.05.2010
comment
@Richard Спасибо за повтор. Дорогой Ричард, я использую асинхронные потоки на страницах, но это нечто другое, о чем я спрашиваю по какой-то причине, которую немного сложно анализировать. В некотором роде это способ скорости. Я работаю над многими обходными путями, но мне просто интересно, есть ли способ прочитать данные сеанса любого пользователя, просто зная идентификатор сеанса. Другими словами, скажем, что мне нужно отлаживать все данные сеанса от всех пользователей и смотреть, что на них - как я могу это сделать? - person Aristos; 05.05.2010

Я могу немного опоздать, но... Сегодня я узнал о: System.Web.HttpRuntime.Cache

Я знаю, что это не то же самое, что сеанс, но я думаю, что это гораздо лучшая альтернатива БД. С уважением.

person Lucas    schedule 03.12.2010
comment
Спасибо за твой ответ. Данные сеанса для каждого пользователя, но кеш является глобальным. Я ищу что-то подобное, чтобы иметь возможность использовать пользовательские данные сеанса в отдельном потоке. - person Aristos; 06.12.2010