【问题标题】:Cookieless ASP.Net sessions for static pages静态页面的无 Cookie ASP.Net 会话
【发布时间】:2012-10-18 16:51:05
【问题描述】:

我正在使用ASP.Net cookieless sessions,以便通过 302 重定向将其放置在 URL 中来跟踪应用程序的会话 ID,例如,如果用户要访问以下 URL

http://yourserver/folder/default.aspx

然后它们将被重定向到类似于以下内容的 URL,然后继续提供实际页面内容

http://yourserver/folder/(S(849799d1-7ec0-41dc-962d-a77e1b958b99))/default.aspx

我遇到的问题是,应用程序的入口点实际上是一个静态页面(例如带有 .html 扩展名的页面),并且 ASP.Net 没有发出会话 ID & 为该页面重定向用户。 因此,这意味着指向 ASP.Net 托管内容的链接(例如链接、iframe 等)都会为每个链接创建一个新的会话 ID。出于兼容性原因,我无法轻松更改页面扩展名(尽管这确实解决了问题)。

如何提示 ASP.Net 为我的页面创建会话?我尝试添加显式处理程序映射以确保页面由 ASP.Net 模块处理,但这没有影响 - 在调试时我可以看到正在为此页面创建 SessionIDManager 实例(暗示不管我的处理程序映射如何,ASP.Net 已经通过集成管道处理此页面),但是 ASP.Net 仍然没有为此页面创建会话。

我使用的是 IIS 7,但这也需要在 IIS 6(带有显式处理程序映射)和 IIS 8 上工作。

【问题讨论】:

    标签: asp.net iis-7 cookieless


    【解决方案1】:

    我从实验和反编译 ASP.Net 源代码中发现,SessionStateModule 根据请求的 IHttpHandler 是否实现 IRequiresSessionState 或 @987654325 来决定是否为请求创建会话@。如果这些都不正确,那么一切都取决于是否有人使用SetSessionStateBehavior 将会话状态行为设置为RequiredReadOnly

    默认情况下,静态文件处理程序不执行任何这些操作,因此不会为静态文件创建会话 - 为了确保为需要会话状态的静态文件设置会话状态行为,我只需设置会话状态行为在应用程序的BeginRequest 事件期间

    // In Global.asax.cs
    void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Default);
    }
    

    我确信有更好的方法,但这对我有用。

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 2012-03-11
      • 2012-05-13
      • 2013-05-09
      • 2012-09-20
      • 1970-01-01
      • 2015-01-27
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多