0

我有一个 gridview 从我的表中获取超链接值,我也像这样附加到超链接的 NavigateUrl

<asp:HyperLink ID="LinkSection" runat="server" Text='<%# Eval("SECTION") %>' NavigateUrl='<%# "http://localhost:50686/" + (string)Eval("SECTION") + ".aspx"%>'>

一旦我开始部署网站,一切似乎都运行良好,同时调试恐怖开始。我注意到 IIS 使用 INPROC 进行会话,不确定 Visual Studios 在调试时使用什么,但效果很好。

一旦我进入我的 webconfig 文件并手动设置会话变量以使用 INPROC

<sessionState mode="InProc"
                  cookieless="true"
                  regenerateExpiredSessionId="true"
                  timeout="30" />

一旦我单击超链接,我的应用程序不再工作似乎我正在失去我的会话值。因此,如果会话值为空,我添加了一些逻辑来重定向回我的登录页面,有趣的是,一旦我单击一个链接,它就会将我发送回登录页面,如果我要重新登录,它有时会起作用。

我正在设置我的会话值

Session["LoggedInUser"] = txtEmail.Text;

并检索它

 cmd.Parameters["@EMAILACCT"].Value = Session["LoggedInUser"];

我没有将它部署到任何服务器场,因此我想坚持使用我读到的最佳性能会话方法,如果可能的话,它是 INPROC。

4

1 回答 1

1

看起来在使用 sessionstate 模式时,您忽略了 cookieless 选项。在 mode=Inproc 和 cookieless=true 的情况下,asp.net 使用 url 来存储会话 id。如果使用绝对 url,asp.net 不能附加 sessionid。解决方法是将 url 转换为相对 url,如下所示:

NavigateUrl = Response.ApplyAppPathModifier(yoururl);

是一个讨论,您可能会发现它有帮助。

于 2013-08-16T06:57:04.763 回答