我正在使用一个旧的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?
对我而言,代码是由一个不成熟的开发人员编写的。请提供您的反馈。
答案 0 :(得分:1)
除非他将SessionID
参数用于其他东西 - 其中一些依赖于其存在于QueryString中的其他模糊逻辑,所以没有理由在查询字符串中放置SessionID
所有。无论是否启用了Cookie,如何让SessionID
对您来说都是透明的,只需执行以下操作即可:
var sessionID = Session.SessionID;
来自MSDN的有关无Cookie会话的一些相关文档(根据您展示的Web.config, >)
ASP.NET通过自动插入来维护无cookie会话状态 页面URL中的唯一会话ID。例如,以下内容 ASP.NET已修改URL以包含唯一的会话ID lit3py55t21z5v55vlm25s55: http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx 当ASP.NET向浏览器发送页面时,它会修改页面中的任何链接 通过嵌入会话ID使用应用程序相对路径的页面 链接中的值。 (不修改带绝对路径的链接。) 只要用户单击具有的链接,就会维护会话状态 以这种方式进行了修改。但是,如果客户端重写URL 由应用程序提供,ASP.NET可能无法 解析会话ID并将请求与现有关联 会话。在这种情况下,将为请求启动一个新会话。