手动创建/填充.NET Session对象

时间:2011-07-21 22:00:16

标签: c# asp.net session caching

首先简要介绍背景。我正在使用.NET输出缓存和替换控件来保持每页刷新更新一些位。替换控件使用的静态方法需要访问Session对象。不幸的是,HttpContext会话在这些方法中为空。

我不打算将我的应用程序重写为使用与Session不同的商店。除了这一方面,Session对于我需要的一切都是完美的。

我可以手动创建或填充会话对象,或通过某种黑魔法魔法来获取其数据吗?会话cookie仍在从客户端设置到服务器。信息必须在某处。我怎么得到它?

3 个答案:

答案 0 :(得分:1)

会话信息存储在服务器的内存中。但是,您可以configure ASP.NET to store the session information inside SQL Server

答案 1 :(得分:1)

我不相信这是一种“好”的方式......但你可以非常笨拙地在共享/静态变量中存储对Session的引用,然后访问它。

Public Class SessionHelper

    Public Shared TheSession As HttpSessionState

End Class

在你的Session Start事件中(尚未找到最佳位置,因为据我所知,应用程序启动时会话不可用)

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

答案 2 :(得分:0)

HttpContext.Current.Session应该允许您访问当前的Session。只有在没有当前的HttpContext的情况下才能使用它。只要您有对System.Web的引用,它就可以工作。