gpt4 book ai didi

asp.net - Session_Start 在默认 ASP.NET MVC3 项目上多次触发

转载 作者:行者123 更新时间:2023-12-02 14:24:57 24 4
gpt4 key购买 nike

我想我可能发现了 ASP.NET MVC 及其事件管道的问题。特别是,我发现 Session_Start 被多次调用,每次都包含一个新的 SessionID。

以下是分步过程:

  1. 打开VS2010
  2. 文件|新项目
  3. ASP.NET MVC 3 Web 应用程序,接受默认名称,单击“确定”
  4. 选择“Internet Application”(尽管我认为这并不重要),然后点击“确定”
  5. 创建完成后,编辑 Global.asax.cs 文件
  6. 添加以下方法(是的,它是空的):

    protected void Session_Start(){}

  7. 在方法中设置断点

  8. 调试
  9. 请注意,在显示页面之前,断点被捕获两次。如果你在断点被捕获时观察“Session.SessionID”,你会发现 session ID 每次都是新的。
  10. 进入主页后,点击“主页”或“关于”标签链接。
  11. Session_Start 将再次触发,这次使用新的 SessionID。
  12. 继续执行,任何后续操作都将不再触发 Session_Start。

我在标准 ASP.NET Web 应用程序(不是 MVC)上尝试了同样的操作,并且 Session_Start 仅触发一次。

我很确定我在这里没有做错什么,因为我使用的是默认项目模板,唯一要修改的代码是 Global.asax.cs 文件,以添加 Session_Start 方法。

我使用的是 IIS Express,但我使用“Cassini”Web 服务器(Visual Studio 开发服务器)重复了上述步骤,得到了相同的结果。

有什么建议吗?

更新

我决定在调试 session 期间使用 Fiddler 检查 HTTP 流量。看来:

  1. 当我请求“/” URL 时,会触发第一个 Session_Start。这似乎很合理。然后将当时生成的SessionID写入到浏览器的响应中。再说一遍,似乎很合理。
  2. 然后,Fiddler 显示 *.js 和 *.css 文件的请求/响应。一切成功。这些都不会触发 Session_Start。到目前为止还不错。
  3. 然后 Fiddler 显示已对“/favicon.ico”发出请求。此时,Session_Start 触发,并生成一个新的 SessionID...我继续。
  4. 在 Fiddler 上,它显示找不到“/favicon.ico”文件 (404)。显示网页。我点击“主页”链接。
  5. 在 Fiddler 中请求 URL“/”并且响应正常。但随后,请求另一个“/favicon.ico”文件,并再次使用新的 SessionID 触发 Session_Start...我继续。
  6. 所有后续请求都会得到响应,浏览器将停止请求“/favicon.ico”。

我记下了生成的三个 SessionID,浏览器保存的似乎是第一个。因此,当我们进行到上面的第 6 步时,一切似乎都正常,它实际上使用的是生成的第一个 SessionID。

所以...我决定托管一个“favicon.ico”文件。我将 ico 文件放置在项目的根目录中,然后再次开始调试 session 。这次,Session_Start 仅触发一次。 “/favicon.ico”已成功提供(200)。

所以...我想从某种意义上说它正在按应有的方式工作...但是为什么调用“/favicon.ico”会触发 Session_Start 事件???我不应该选择不托管网站图标吗?

旁白:我在 ASP.NET(不是 mvc)项目中尝试了上述所有方法,并且没有出现相同的问题,即使默认的“ASP.NET Web 应用程序”没有托管 favicon.ico 文件项目。

最佳答案

有点遇到这个问题有一段时间了,最​​后我意识到这是因为发生了一些 http/https 恶作剧......看起来如果你翻转它会破坏并重新创建你的 session 像这样的 ssl,你就有了

<sessionState mode="InProc" sqlCommandTimeout="3600" timeout="120" cookieless="false" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />

对于新玩家或非常累且注意力不集中的人来说,这可能是一个陷阱! :)仅供引用,以防这对任何人有帮助......

关于asp.net - Session_Start 在默认 ASP.NET MVC3 项目上多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com