【问题标题】:Session for a Tab in ASP.NETASP.NET 中选项卡的会话
【发布时间】:2009-06-17 15:53:36
【问题描述】:

在 ASP.NET 中,会话是针对浏览器的。但是如何为选项卡创建会话?

【问题讨论】:

    标签: asp.net session browser session-state


    【解决方案1】:

    使用以下内容:

    <configuration>
      <system.web>
        <sessionState cookieless="true"
          regenerateExpiredSessionId="true" />
      </system.web>
    </configuration>
    

    还有一个citation from MSDN

    ASP.NET 维护无 cookie 会话 通过自动插入一个状态 页面 URL 中的唯一会话 ID。 例如,下面的 URL 有 已被 ASP.NET 修改为包含 唯一的会话 ID lit3py55t21z5v55vlm25s55:

    http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

    当 ASP.NET 向 浏览器,它会修改 使用应用程序相关的页面 通过嵌入会话 ID 值的路径 在链接中。 (绝对链接 路径未修改。)会话状态 只要用户保持 点击已修改的链接 以这种方式。但是,如果客户端 重写由 应用程序,ASP.NET 可能无法 解析会话 ID 和 将请求与现有的 会议。在这种情况下,一个新的会话 为请求启动。

    因此,为新标签打开新会话只需打开一个不带会话标识符的网址。
    编辑:
    正如其他用户所提到的,您应该注意这个“功夫”。如果您在会话中存储用户敏感信息 - 请secure your authentification cookies

    编辑2: 请注意,当您在 url 中使用会话密钥时,用户可以将其复制并发送给一些朋友。并且该用户和他的朋友将共享单个会话(这将是一个很棒的功能!:))。为避免这种情况,您可以执行以下操作:
    1. 在 onSessionStart 方法中以某种方式添加到用户(用户的配置文件,存储在数据库中)的关联,并在 BeginRequest 上检查它。
    2.当referrer为空或不等于当前域时,检查referrer并创建新会话(重定向到无会话url)(但要注意,referrer可以手动设置)
    3. 重写会话 ID 的生成并将其与用户名和 ip/mac(xor 或类似的东西)相关联。并在接听会话时在舞台上验证这一点。
    4. 使此会话密钥仅对当前用户有效的其他方法。

    【讨论】:

    • 使用 cookieless 会话引入了一个非常可怕的安全问题,我认为不应该使用它。
    • 不是很容易,要困难得多.. cookieless 会话会损坏网站的 url,更糟糕的客户没有意识到如果他们复制和粘贴 url.. 他们正在放弃他们的会话。 . 正常会话不会发生的事情.. 因为用户不能无知地泄露他们的 cookie 值.. 窃取会话的最可能原因是通过网站上的 XSS。
    • 这很难在 onSessionStart 方法中以某种方式向用户添加关联吗?当referrer为空或不等于当前域时,这是否难以检查referrer并创建新会话?这很难重写会话 ID 的生成并将其映射到用户名和 ip/mac 吗?当用户复制并将链接提供给某人时,有很多方法可以解决问题。我们总是可以添加一个闪亮的大按钮“将当前 url 复制到缓冲区”。关于XSS,在我看来你对它了解一点。当你有 XSS 漏洞时,所有的 cookie 都可以被窃取。你应该更加关心 auth cookie。
    • 呃,我说'窃取会话的最可能原因是通过网站上的 XSS'.. 也许你应该阅读.. 是的,我会告诉我的用户,当他们的帐户被泄露,因为他们没有点击“复制 url”,而是“愚蠢地”只是在他们的浏览器中复制了 url。显然你否决了我的建议,因为你在 http 中有一种扭曲的安全感。很清楚:我很清楚 cookie 并不安全,但它们比 url 安全得多。而且通常会受到 XSS 的影响,其中 XSS 攻击可以做比窃取 cookie 更糟糕的事情。。
    • @AnthonyWJones,但这是最好的方法。顺便说一句,ASP.NET WebForms 和 VB 也很丑,但谁在乎呢?
    【解决方案2】:

    会话 cookie 保存在该浏览器实例可访问的易失性存储中。您将需要一个支持您所追求的概念的浏览器,据我所知,不存在这样的浏览器。

    在 ASP.NET 中,您可以在不使用会话 cookie 的情况下维护会话,它真的很丑,我不推荐它,但它可能是您实现目标的一种方式。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      相关资源
      最近更新 更多