【问题标题】:Create a session mechanism without cookies创建没有 cookie 的会话机制
【发布时间】:2012-11-01 00:03:12
【问题描述】:

我目前正在使用一种设备来呈现由 IIS 服务器提供的 xml 视图。不幸的是,该设备不支持 cookie 或重定向,这会使常规 asp.net 会话或无 cookie 会话的使用无效。

数据超出了 url 查询字符串允许的大小,所以这也不是一个选项。

我想做的是拥有某种自定义会话机制,我可以在其中明确告知会话 ID(ID 可以是在 url 查询字符串中传递的设备的 mac 地址)。

我可以使用 sql 数据库,但我想避免这种情况。

有什么想法吗?

编辑:

我刚刚得知该解决方案将在负载平衡器上运行,因此看来我真的要使用 SQL 解决方案。感谢您的回复,这两个都是有效的,但似乎我在这方面没有太多选择......

【问题讨论】:

    标签: c# asp.net session-state cookieless


    【解决方案1】:

    除非您想将每次交互都设为 POST,即每次用户单击链接时都传递会话数据,否则您必须将状态存储在某处(例如数据库),并使用轻量级 ID(如您描述的 mac 地址)。

    当然不一定是SQL数据库,可以看看redis等其他存储机制。

    【讨论】:

      【解决方案2】:

      您所需要的只是用户独有的密钥。如果您有权访问 Mac 地址,请使用该地址。不过,我可能会选择 GUID 并在查询字符串中传递这一轮。

      在服务器端,您可以选择数据库方法(或任何形式的文件存储,但数据库会针对查询性能进行优化),或者将信息存储在内存中。创建一个静态字典类型类,将数据与每个“唯一键”相关联。然后就可以轻松查询数据了。

      当您需要在会话到期时进行锻炼时,更困难的部分来了。如果您采用数据库方法,您可以编写一个 Windows 服务来查询“最后更新的会话”标志,如果会话过期超过给定时间,则删除该会话。如果您选择“内存中”方法,这可能会更难管理。

      “内存中”选项的另一个缺点是您需要小心存储过多信息并耗尽可用内存。这是我选择数据库存储的主要原因

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-02
        • 2011-04-10
        • 2011-04-14
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        相关资源
        最近更新 更多