首先简要介绍背景。我正在使用.NET输出缓存和替换控件来保持每页刷新更新一些位。替换控件使用的静态方法需要访问Session对象。不幸的是,HttpContext会话在这些方法中为空。
我不打算将我的应用程序重写为使用与Session不同的商店。除了这一方面,Session对于我需要的一切都是完美的。
我可以手动创建或填充会话对象,或通过某种黑魔法魔法来获取其数据吗?会话cookie仍在从客户端设置到服务器。信息必须在某处。我怎么得到它?
答案 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对象但缓存是缓存,其中作为会话确实需要一些东西来识别每个会话......无论如何你要去:
答案 2 :(得分:0)
HttpContext.Current.Session应该允许您访问当前的Session。只有在没有当前的HttpContext的情况下才能使用它。只要您有对System.Web的引用,它就可以工作。