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

标签 c# asp.net session caching

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

我不会重写我的应用程序以使用与 session 不同的商店。除了这一方面,Session 非常适合我需要的一切。

我能否手动创建或填充 session 对象或以其他方式通过某种黑魔法获取其数据? session cookie 仍在从客户端设置到服务器。信息必须存在于某处。我如何获得它?

最佳答案

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

Public Class SessionHelper

    Public Shared TheSession As HttpSessionState

End Class

在您的 Session Start 事件中(还没有找到放置它的最佳位置,因为据我所知,Session 在 Application 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")

关于此方法我不确定的几件事:

  • 不确定 session 对象现在是否不是线程安全的
  • 好像不太对
  • 这个例子非常简单...

编辑
我通过向缓存添加一些内容并查看 session 在缓存删除回调中是否可用(其中 Http.Context.Current 在其中不可用)来验证这对我有用。

编辑2
这是它正确返回值的屏幕截图。所以它一定在某种程度上起作用,但是没有设置 SessionId 的事实有点令人担忧......我知道我之前使用过这种技术来访问 Cache 对象但是缓存就是缓存, session 在哪里确实需要一些东西来识别每个 session ......无论如何,你去吧: enter image description here

关于c# - 手动创建/填充 .NET Session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783352/

相关文章:

php - Laravel 所有 session ID 与 Redis 驱动程序

c# - 在 Windows Phone 7 或 Windows Phone 8 中使用 CollectionView 的 LongListSelector 分组

c# - 打开使用 EPPlus 生成的 excel 文件时显示的错误对话框

c# - Automapper:手动映射属性

c# - 为什么不能在 Page.PreInit 事件之后动态应用主题和母版页?

session - HttpSessionBindingListener 和 HttpSessionAttributeListener 的实际用法

c# - 如何返回 "Grouped by"聚合结果?

asp.net - FindControl 在页面中查找控件

asp.net - 使用外键列进行 SQL 全文搜索

php - Web 服务器何时清除 PHP session 标识符?