0

我正在使用一个旧的 ASP.NET 应用程序,它有很多糟糕的代码。

我主要是一名 winform 开发人员,我对 webforms 的了解仍然有限。

然而,以开发人员试图将信息传递到其他页面的方式查看代码对我来说听起来是无效的。

这是他将信息从一个页面传递到另一个页面的典型方式:

Response.Redirect("ABC.aspx?SessionID=08F7DCF3D6984EC984F6580A4EC7E9C2&CID=" _
                    & e.Item.Cells(iColClientID).Text & "", True)

然后在其他页面上,他使用 Request.QueryString 取回数据:

Request.QueryString

我的问题是为什么他还需要SessionID=08F7DCF3D6984EC984F6580A4EC7E9C2在查询字符串中传递一个硬编码。

Web.config 显示:

<sessionState mode="InProc" cookieless="false" timeout="30"/>

那么如果会话使用 cookie 为什么要发送会话 ID?

对我来说,代码是由一位成熟的开发人员编写的。请提供您的反馈。

4

1 回答 1

1

除非他将SessionID参数用于其他用途——其中的一些其他模糊逻辑依赖于它存在于 QueryString 中——否则根本没有理由将 aSessionID放入查询字符串中。启用或不启用 cookie 如何获得对SessionID您来说应该是透明的,这样做就足够了:

var sessionID = Session.SessionID;

MSDN 中有关无 cookie 会话的一些相关文档(根据您展示的 Web.config,此处并非如此):

ASP.NET 通过自动将唯一的会话 ID 插入页面的 URL 来维护无 cookie 会话状态。例如,以下 URL 已被 ASP.NET 修改为包含唯一会话 ID lit3py55t21z5v55vlm25s55: http ://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx 当 ASP.NET 向浏览器发送页面时,它会通过在链接中嵌入会话 ID 值来修改页面中使用应用程序相对路径的任何链接。(带有绝对路径的链接不会被修改。)只要用户单击以这种方式修改的链接,会话状态就会保持。但是,如果客户端重写应用程序提供的 URL,ASP.NET 可能无法解析会话 ID 并将请求与现有会话相关联。在这种情况下,会为该请求启动一个新会话。

于 2013-05-30T15:01:52.963 回答