ASP.Net会话问题

时间:2009-09-15 09:18:31

标签: c# asp.net .net visual-studio-2008 iis-7

我使用的是VSTS 2008 + C#+。Net 3.5 + IIS 7.0 + ASP.Net。我想知道我的网站上是否有aspx页面和html页面,会话变量是否只能在aspx页面中传输?或者会话可以在aspx和html页面中传输? (转移我的意思是我的网站内的用户点击链接遍历我的网站,例如我在我的网站上有1.aspx,1.html和2.aspx,1.aspx链接到1.html,当用户点击时1.html链接在1.aspx中转到1.html,我的意思是转移到1.html。)

我有这种困惑,因为在aspx中我们可以轻松地从ASP.Net Session对象访问会话状态,但对于html页面,我不是如何维护会话。

另一个困惑是,我认为session是ASP.Net的一个概念,而不是html页面,所以我认为session只在aspx页面中维护。如果我错了,请纠正我。 : - )

3 个答案:

答案 0 :(得分:3)

不,会话不会丢失。 ASPX - > HTML - > ASPX没问题。

在上面的序列中,HTML页面的请求也会收到cookie,但会被忽略。

创建会话时,会向浏览器发送一个cookie(实质上,它作为服务器端会话逻辑的查找键)。无论目标如何,对该浏览器实例的同一域的每个请求都将包含cookie。

要查看此内容,请创建.aspx页面,使用会话(例如Session["x"] = "foo";)并使页面引用其他一些资源,例如图片或脚本。

如果您随后使用HTTP流量监控器,例如FiddlerCharles Proxy(均适用于所有浏览器),您将看到每个请求中都包含Cookie。

.aspx页面将以Set-Cookie:标头回复,后续浏览器请求将包含Cookies:标头。

答案 1 :(得分:2)

通常,HTML页面无法访问服务器端功能,因为它们只是按原样呈现出来。默认情况下,ASP.NET引擎不提供它们,因此您无法在HTML页面中实际执行任何.NET工作。

如果您想使用会话,则应使用类似ASPX页面的内容。

答案 2 :(得分:1)

正如devstuff所说,会话不会丢失,但你不能在html页面中访问会话的值,因为会话值存在于服务器上,并且html在服务器端是100%静态的。

如果你需要在html中使用session,你应该将它转换为aspx,但这并不困难,因为html标记在aspx中也是有效的。