Вручную создать / заполнить объект .NET Session - PullRequest
2 голосов
/ 22 июля 2011

Сначала краткий фон. Я использую элементы управления кэшированием и заменой .NET, чтобы обновлять несколько битов при каждом обновлении страницы. Статические методы, используемые элементами управления заменой, требуют доступа к объекту Session. К сожалению, сеанс HttpContext в этих методах пуст.

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

Могу ли я вручную создать или заполнить объект сеанса или иным образом получить его данные с помощью какого-то волшебства черной магии? Файл cookie сеанса все еще устанавливается от клиента к серверу. Информация должна быть где-то там. Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Я не уверен, что это "хороший" способ ... но вы можете очень ловко хранить ссылку на Session в общей / статической переменной и затем обращаться к ней.

Public Class SessionHelper

    Public Shared TheSession As HttpSessionState

End Class

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

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)

    ' Store a reference...only do this once etc etc
    If SessionHelper.TheSession Is Nothing Then
        SessionHelper.TheSession = HttpContext.Current.Session
    End If

End Sub

Тогда в вашем коде вы можете просто ссылаться на помощника

Dim someVariable as String = SessionHelper.TheSession.Item("ItemName")

Несколько вещей, в которых я не уверен:

  • не уверен, что объект сеанса теперь не является потокобезопасным
  • это не совсем правильно
  • этот пример чрезвычайно прост ...

Редактировать
Я убедился, что это работает для меня, добавив что-то в кеш и проверив, доступен ли сеанс в обратном вызове удаления кэша, в котором Http.Context.Current недоступен.

Редактировать 2
Вот скриншот того, как правильно вернуть значение. Так что это должно работать в некоторой степени, но тот факт, что SessionId не установлен, вызывает некоторое беспокойство ... Я знаю, что я использовал эту технику прежде, чтобы получить доступ к объекту Cache, но кеш - это кеш, где в качестве сеанса нужно что-то, чтобы идентифицировать каждый сеанс ... enter image description here

1 голос
/ 22 июля 2011

Информация о сеансе хранится в памяти сервера. Однако вы можете настроить ASP.NET для хранения информации о сеансе внутри SQL Server .

0 голосов
/ 22 июля 2011

HttpContext.Current.Session должен предоставить вам доступ к текущему сеансу.Единственный раз, когда это не сработает, это когда нет текущего HttpContext.Если у вас есть ссылка на System.Web, она должна работать.

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