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

2023-12-02

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

以下是分步过程:

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

    受保护无效 Session_Start() { }

  7. 在方法中设置断点

  8. Debug
  9. 注意断点被捕获twice在显示页面之前。如果您在捕获断点时观察“Session.SessionID”,您将看到会话 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 开发服务器)重复了上述步骤,得到了相同的结果。

有什么建议吗?

UPDATE

我决定在调试会话期间使用 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_Start 仅触发一次。 “/favicon.ico”已成功提供(200)。

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

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


I kinda遇到这个问题有一段时间了,最​​后我意识到这是因为有一些 http/https 恶作剧正在进行......看起来它会破坏并重新创建你的会话,如果你像这样翻转 ssl 并且你有

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Session_Start 在默认 ASP.NET MVC3 项目上多次触发 的相关文章

  • 禁用 ASP.net 文本框而不实际禁用它?

    在我的 ASP Net 应用程序中 有一个文本框可以从CalendarExtender 填充文本框后 它会将该日期与表单上的另一个日期进行检查并显示modalpopupextender如果日期错误 则会弹出窗口 但是 我不想允许用户输入此文
  • 如何使用 Windows 身份验证指定 Windows 用户从 ASP 连接到 MS SQL Server 数据库

    我已经尝试了一个多月的时间来将这里的 ASP 脚本连接到 SQL Server 数据库 但每次我使用这个连接字符串时 Data Source dbServer01 Initial Catalog POS123 Integrated Secu
  • 带有 jQ​​uery 日期选择器 OnTextChanged 的​​文本框未触发

    我有一个带有 OnTextChanged 事件的 asp textbox 当从绑定到它的 jQuery 日期选择器中选择新日期时 我想触发该事件 但在选择日期时 OnTextChanged 永远不会触发 如果我 手动 更改文本 它会触发 但
  • ASP.NET WebApi - 一个控制器中的多个 GET 操作

    I have Users控制器和基本 REST 模式工作得很好 不过我需要一种额外的模式users id usergroups这将返回该用户的所有用户组 实现这一点的最佳方法是什么 因为我想我将需要在更多控制器上使用类似的路由 仅使用默认值
  • 在我的网站上显示 Google Analytics(分析)仪表板

    我设置了一个 ASP NET 网站 并使用 Google Analytics 进行页面跟踪 我唯一不喜欢的是我必须离开我的网站 到 Google Analytics 网站 才能看到该报告 有什么方法可以使用他们拥有的所有 AJAX 在我自己
  • 我的机器密钥是自动生成的还是隔离的?

    我正在尝试分享 ASPXAUTHASP NET MVC 4 应用程序 在 IIS 7 5 中 和使用的服务之间的 cookieHttpListener在同一主机上 浏览器正确地向两者呈现 cookie 但我的服务收到System Web H
  • 获取 SignalR hub 内的完整 URL

    我正在使用 SignalR 开发一个用户跟踪解决方案 作为学习 SignalR 的有趣项目 用于 ASP NET MVC 应用程序 目前我可以跟踪登录的用户以及他们在特定页面上停留的时间 如果他们移动到另一个页面 我也会跟踪该页面 并且 S
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • 向特定客户端发送消息以及消息发送用户

    我是 SignalR 的初学者 我创建了一个基于 SignalR 的基本聊天应用程序 我面临的问题是我想向特定客户端以及发送消息的用户发送消息 这个怎么做 我知道要向特定客户端发送消息 我们可以这样做 Clients Client Cont
  • 如何在aspx页面中的repeater ItemDataBound函数中传递Control.ClientID?

    我想调用 JavaScript 函数来折叠 展开 我在 asp repeater 中使用此代码ItemTemplate在跨度上 onclick javascript funCollExp this 我该如何通过Control ClientI
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • 在 ASP.Net 网站中使用 VBScript 中的变量

    我花了一天的大部分时间来研究这个问题 但找不到答案 我对 stackoverflow 比较陌生 询问多个问题是否有一定的礼仪 过去几天我问了三个问题 Anyways 这是代码隐藏文件中的代码 它执行脚本 systeminfo vbs 并且工
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • 基于网络的应用程序中的图表

    可使用 ASP NET 在网页上显示图表的各种图表工具有哪些 我了解 Dundas 和 Infragistics 等商业工具 我可以用谷歌搜索这个 但我想知道参与者使用过的各种工具 任何可用的免费图表工具也欢迎提及 如果您不介意使用 Fla
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • mvc4 捆绑包,它是如何工作的?

    在 mvc4 中 他们使用捆绑包来调用所有脚本和 css 文件一次 据我所知 调用js和cs文件时 它们的顺序很重要 如果我使用捆绑包 我如何知道捆绑包内的 css 和 js 文件的顺序是否正确 我可以定制订购吗 我现在的日期选择器有问题
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • Jquery 验证不能正确验证数字?

    我在使用 jquery 非侵入式验证验证数字时遇到问题 我使用的版本是 ASP NET MVC 3 jQuery 1 9 1 jQuery 用户界面 1 10 1 JQuery 验证 1 11 0 我试图验证的输入是

随机推荐

  • C++ 可变参数宏:如何检索参数值

    类中有很多实现类似的方法 只是方法的名称和参数列表不同 void function1 int a bool b mMember gt function1 a b void function2 double a string b mMembe
  • 从谷歌地图获取路线和地图上每2公里的点

    我知道 GPS 坐标我的起点和终点 现在我想知道这次旅行的行车路线 然后获取这条路线上每2公里的GPS坐标 我怎样才能用 php javascript 做到这一点 Thanks 添加的代码
  • html 输出中的特殊字符

    我希望直接打印像 这样的字符 但在源代码中 显示为 248 如果输出通过Html Encode 它不会呈现正确的字符 但是 248 在我的配置中
  • 从 Windows 注册表启动时启动应用程序时,返回 ClickOnce 版本不起作用

    我正在使用以下代码System Deployment返回我的 NET 3 5 C 应用程序的 ClickOnce 版本 public string version get System Reflection Assembly assembl
  • 如何用SQL导出全文文件?

    有将全文字段导入 导出为文件的简单方法 解决 加载为多行 的问题 尝试使用 SQLCOPY我只能将完整文件转换为完整表格 而不能转换为单个文本字段 因为 COPY 中的每一行都是原始的 解决了保存回问题 将完整的 XML 文件保存在文件系统
  • python:哪个文件更新以及更新了多少时间

    我正在尝试创建一个文件日期比较例程 我怀疑以下是一种相当笨拙的方法 我在查找有关 timedelta 的属性或方法或它们的名称的信息时遇到了一些困难 因此 我仅以天 分钟和秒来测量下面的日期时间差异 并且没有代表年份的列表项 任何替代方案的
  • 更改 Mac OS X 上的 docker 存储驱动程序

    我在 Mac OS X 上安装了 docker 工具箱 我需要将 docker 存储驱动程序从aufs to 设备映射器 因为aufs造成问题 我找到了docker官方文档并按照解释的方式尝试了here but DOCKER OPTS st
  • 我的 jQuery 无法与 IE11 配合使用

    所以我得到了三段代码来将东西加载到 div 中并做其他事情 但它不适用于 Internet Explorer 我检查了 IE11 控制台 这就是我得到的 SCRIPT5009 is undefined 这很奇怪 在其他所有浏览器中它都工作正
  • 以编程方式设置角度 5 ng-select 中的选定值

    我正在使用 angular5 ng select 组件 https github com ng select ng select并尝试设置选定值 以编程方式 当容器组件首次加载时 模型中设置的默认选择值 我没有找到它或的任何相关属性已选择对
  • configmap 更改不会自动反映在各个 pod 上

    apiVersion apps v1 for versions before 1 8 0 use apps v1beta1 kind Deployment metadata name consoleservice1 spec selecto
  • 如何在python中从ffmpeg流中提取视频和音频

    我想从 ffmpeg 流中获取单独的视频和单独的音频对象 python 为此 我在我的树莓派上运行它 ffmpeg f alsa thread queue size 1024 channels 1 i hw 2 0 thread queue
  • 当高度为 100% 时,IE 10 会出现显示表格 CSS 的 bug?

    我已经尝试了 3 天来避免在我的新响应式设计中使用表格 主要是因为每个人都说它们是邪恶的 另一方面 在对 SEO 和表格进行更多研究时 有些人甚至说这提高了他们的知名度 无论如何 div 和 HTML5 的语义要好得多 所以我真的很想让下面
  • Python地址下载

    下面的代码返回none 我该如何修复它 我正在使用Python 2 6 import urllib URL http download finance yahoo com d quotes csv s s f sl1t1v e csv sy
  • Objective C 方法签名可以指定枚举类型吗?

    VoiceName 是一个枚举 声明如下 enum VoiceName PAD RHYTHM PAD RHYTHM2 PAD RHYTHM3 PEEPERS ATMOSPHERE IMPULSE FAST PULSE HAIRYBALLS
  • Boost python 包装虚拟方法

    我正在使用 boost python 创建与 c 库的绑定 该库中的许多类都具有接受 iterator const iterator 类型作为参数的虚拟方法 我并不是特别想公开这些类型 但更愿意围绕这些虚拟方法创建一些包装器来接受适当的容器
  • webkit 上浮动 div 后“overflow:hidden”div 的边距行为

    我发现 float left div 后面的 overflow hidden div 的右侧边距加倍 可以使用以下代码进行测试
  • 如何获取 PyQt 中 QGroupbox 内存在的 Qcheckbox 的状态

    我的项目包含具有多个 QGroupbox 的 Qdialog 每个 GroupBox 包含一定数量的复选框 所有组框的复选框列表都是相同的 我没有太多声誉来加载图像 在这里 用户可以根据自己的需要选择复选框并按下 确定 按钮 按下 确定 按
  • 当我们告诉 PDO 不要这样做时,为什么它会生成警告?

    Problem 我们告诉 PDO 将每个问题包装到异常中 在某些情况下 它会生成一些警告 然后才抛出异常 Why它能做到吗 重复 SO 上没有关于它的正确答案 最后一个问题是MySQL 上的 PHP PDO 异常 警告消失了 但人们只是将其
  • 在Mysql中将数字转换为单词

    我正在从数据库中获取一个值 我希望将该值转换为一个单词Mysql 有人可以帮我吗 Eg 123 gt 这个值是从数据库获取的 它以数字形式保存 我想检索这个值一百二十三从数据库中 这样做的语法是什么 查询是这样的 select value
  • Session_Start 在默认 ASP.NET MVC3 项目上多次触发

    我想我可能发现了 ASP NET MVC 及其事件管道的问题 特别是 我发现 Session Start 被多次调用 每次都包含一个新的 SessionID 以下是分步过程 打开VS2010 文件 新项目 ASP NET MVC 3 Web