【问题标题】:What is the best way to access ASP.net Session Data using JavaScript?使用 JavaScript 访问 ASP.net 会话数据的最佳方式是什么?
【发布时间】:2010-09-30 03:36:41
【问题描述】:

如何使 ASP.net 会话数据可用于 JavaScript 方法?我在谷歌上找到了this 链接。任何人都有一个不使用 ScriptManager 的更好的技巧吗?

【问题讨论】:

  • 你应该看看 slolife 的回答。它的一流!

标签: asp.net javascript session


【解决方案1】:

您必须以某种方式将其放入页面中。使用隐藏的表单域是一种方法。使用链接之类的 web 方法是一种更复杂的方法,它为您提供了一些 ajax 功能。

如果您实际上不需要从服务器更新此值,除了回发,您可以使用隐藏输入控件HtmlInputHidden

【讨论】:

    【解决方案2】:

    对实现 IRequiresSessionState 的 ASHX 的常规 AJAX 调用

    你到底为什么要这么做?

    【讨论】:

    • 你不会想知道 :( 如果只有人们愿意听我的话。
    • 我也不得不这样做,然后我炸毁了服务器以证明这是一个坏主意。他们得到了照片 =)。
    【解决方案3】:

    老实说,ScriptManager 方法看起来很简单。滚动您自己的解决方案将需要服务器端的 HttpHandler 和 Ajax 调用,在这种情况下似乎不值得麻烦。

    【讨论】:

      【解决方案4】:

      会话的目的是向客户端隐藏详细信息。在我看来,您应该将其转换为使用 cookie,这显然很容易通过 javascript 检索。

      【讨论】:

        【解决方案5】:

        我可以看到两种选择:

        1. 生成您希望 JavaScript 能够访问的会话数据的 JSON 对象。在初始页面生成期间或作为 JSON 回调的结果将其发送到浏览器。
        2. 创建一个可以通过 AJAX 调用的 ASPX 页面,该页面将返回具有给定键的会话变量的值。

        #2 可能是 ScripManager 代码所包含的内容,无论如何您都应该使用它。但我会谨慎决定您要发送给客户端的会话数据,并且我会使用白名单仅返回我实际需要发送给客户端的会话数据。

        【讨论】:

        • 一个 ASHX Httphandler 会比一个成熟的 ASPX 页面更好。
        【解决方案6】:

        如果放弃 ScriptManager 是您的目标,那么公开页面方法仍然是一个不错的选择,只需使用不依赖 ScriptManager js 库的 javascript。

        我喜欢链接页面中提出的解决方案,但它可能过于开放。也许您想为您希望允许访问的任何/所有 Session 项目创建一个强类型和受控的 PageMethod。这样您就不会意外访问某些秘密 Session 值。

        另外,我认为您需要使用标记 PageMethod

        VB

        WebMethod(EnableSession:=True)
        

        C#

        WebMethod(true)
        

        因为我不认为 EnableSession 默认开启。

        【讨论】:

        • slolife,你刚刚为我节省了大量工作。您不知道我在应用程序中依赖会话数据的程度有多大,而我想将其转换为更多的 ajax 应用程序!太感谢了!!!我希望我可以给你更多的投票!附言它的 [WebMethod(EnableSession=true)] 用于 C#
        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多