使用iframe时随机重用ASP.NET会话

时间:2014-04-08 06:53:04

标签: asp.net iframe session-cookies sessionid

我有这样的场景:

ASP.NET表单WebForm1.aspx,其中包含WebForm2.aspx的iFrame,以及用于跟踪当前SessionId的代码。 ASP.NET表单WebForm2.aspx,其中包含用于跟踪当前SessionId

的代码

正如某人here建议的那样,我会在每个页面加载中执行此操作,并在Global.asax(Session_Start)中执行此操作:

Session["dummy"] = "dummy";

web.config的配置如下:

出于测试目的,我创建了两个Windows窗体应用程序,它们执行以下操作:

1)从一个WebBrowser控件中调用WebForm1.aspx 10次。

2)从10个不同的WebBrowser控件中调用WebForm1.aspx,每次一次。

结果是:

1)WebForm1和WebForm2中的SessionId始终相同。

2)生成多个SessionId:

Form1: ixbahucx3wmii452xlgserk5
Form1: wqh5dwsyovnnwclkfvanlj30
Form1: vddeexb1bfmo4uqw5qjdjol4
Form1: bavcxrgtaz5hvzswlabnuefy
Form1: v2rhzfjwoptmhfpbm2qzzfgh
Form1: pjtiez5dmxldfoojmflsbf1u
Form1: znf0qq41bmsccbjqcdpulefp
Form1: bml5vvj13c22yj0agfua5gyk
Form1: lzdufc3y55tqci0gtfgmpq33
Form1: nch1bocb0obw3tfi0rnz4fa4
Form2: v2rhzfjwoptmhfpbm2qzzfgh
Form2: v2rhzfjwoptmhfpbm2qzzfgh
Form2: znf0qq41bmsccbjqcdpulefp
Form2: znf0qq41bmsccbjqcdpulefp
Form2: lzdufc3y55tqci0gtfgmpq33
Form2: lzdufc3y55tqci0gtfgmpq33
Form2: nch1bocb0obw3tfi0rnz4fa4
Form2: nch1bocb0obw3tfi0rnz4fa4
Form2: nch1bocb0obw3tfi0rnz4fa4
Form2: v2rhzfjwoptmhfpbm2qzzfgh

WebForm1中的某些SessionId在WebForm2中没有对应的一个是什么原因?

1 个答案:

答案 0 :(得分:1)

ASP.NET使用cookie来保留SessionId。

当请求已包含ASP.NET_SessionId cookie时,ASP.NET使用来自cookie的会话ID值来恢复(或者,如果超时,则创建,以便在服务器端创建会话对象)。

当请求不包含ASP.NET_SessionId cookie时,ASP.Net会创建新的Session对象,为其生成新的会话ID,并发送带有响应的会话ID值的Set-Cookie标头。

所以基本上如果浏览器已经设置了cookie值,或者已经处理了前一个响应中的Set-Cookie标题,它将使用它来发送下一个请求,而且旧的'会话将被重用;否则将创建新会话。

案例1表明这非常好。

案例2更复杂,但看起来你同时启动所有10个请求,浏览器控件共享相同的cookie存储。

前十个请求会生成十个完全不同的会话,因为他们没有设置Cookie:

(1) Form1: ixbahucx3wmii452xlgserk5
(2) Form1: wqh5dwsyovnnwclkfvanlj30
(3) Form1: vddeexb1bfmo4uqw5qjdjol4
(4) Form1: bavcxrgtaz5hvzswlabnuefy
(5) Form1: v2rhzfjwoptmhfpbm2qzzfgh
(6) Form1: pjtiez5dmxldfoojmflsbf1u
(7) Form1: znf0qq41bmsccbjqcdpulefp
(8) Form1: bml5vvj13c22yj0agfua5gyk
(9) Form1: lzdufc3y55tqci0gtfgmpq33
(10) Form1: nch1bocb0obw3tfi0rnz4fa4

接下来,逐个请求开始响应服务器,每个请求都包含Set-Cookie标头(因为所有请求都没有SessionID cookie)。这些Set-Cookie中的每个新内容都会覆盖之前的Form2,浏览器将使用新设置的sessionId从iframe请求(11) Form2: v2rhzfjwoptmhfpbm2qzzfgh (12) Form2: v2rhzfjwoptmhfpbm2qzzfgh 。一个接一个地在下面:

收到(5)的回复,在下次回复之前发送了2个请求:

(13) Form2: znf0qq41bmsccbjqcdpulefp
(14) Form2: znf0qq41bmsccbjqcdpulefp

收到(7)的回复,在下次回复之前发送了2个请求:

(15) Form2: lzdufc3y55tqci0gtfgmpq33
(16) Form2: lzdufc3y55tqci0gtfgmpq33

收到(9)的回复,在下次回复之前发送了2个请求:

(17) Form2: nch1bocb0obw3tfi0rnz4fa4
(18) Form2: nch1bocb0obw3tfi0rnz4fa4
(19) Form2: nch1bocb0obw3tfi0rnz4fa4

收到(10)的回复,在下次回复之前发送了3个请求:

(20) Form2: v2rhzfjwoptmhfpbm2qzzfgh

此请求在回复(5)后发送,但刚刚收到回复:

{{1}}