我对VB.NET有点陌生。我有一个页面,该页面设置2个会话变量并重定向到第二页。第二页至少使用会话变量之一。我可以告诉您,因为在第二页上,如果会话变量不正确,则会将用户重定向到拒绝访问的页面。第二页还使用有问题的会话变量。它将根据变量的值读取并填充gridview。我像这样设置变量
Session("ID") = Convert.ToInt32(a_value)
在第二页上,我像这样检索变量
a_page_variable = Session("ID")
我感到奇怪的是,当我在Visual Studio中运行此代码时,它可以按预期工作,但是当我部署并运行它时,我从会话变量中获得0而不是“ a_value”的真实值。我尝试了一些事情,例如确保数据类型在页面之间匹配,并尝试以其他方式检索变量,例如
Session("userID")
和
CType(Session.Item("userID"), Int32)
我还尝试使用来查看第二页的内容
Response.Write
我也尝试使用SQL事件探查器查看正在执行哪种调用来填充gridview,但是我没有任何运气。 gridview给了我一个空的数据集,探查器没有检测到来自应用程序的调用。我以为使用会话变量非常简单,但是很明显,我缺少了一些东西。
感谢您的帮助, 比利
答案 0 :(得分:1)
一种可能性(也是唯一一种在我们掌握的信息很少的情况下就可以猜到的可能性)可能是response.redirect导致应用程序由于异常而终止。
重定向时,您总是希望传递一个false,然后调用完成请求。
Response.Redirect(urlstring, False)
Response.CompleteRequest()
不遵循这些步骤可能会导致异常,从而可能导致会话中断。
另外,解析虚拟路径,因为某些浏览器(尤其是移动设备)可以将这些重定向完全视为新请求,从而生成新的会话令牌。
Dim urlstring As String
urlstring = Page.ResolveUrl("~/default.aspx")
也就是说,这种情况下有许多possible causes。
使用上面提供的描述,我们只是没有足够的信息来真正解决问题。
答案 1 :(得分:0)
谢谢ADyson,Stephen Wrighton和其他竭尽全力帮助我解决这一问题的人。通过添加写入服务器上日志文件的代码,我能够发现发生了什么。找到了日志代码here。我发现我从未到达设置会话变量的代码,这就是它从未在第二页上填充的原因。我试图使用Environment.UserName
获取用户的登录名,该登录名将返回当前登录到操作系统的用户的用户名。但是我真正想做的是获得访问我的网站的用户的登录名。为此,我使用了User.Identity.Name
。当您需要知道Active Directory域中的哪个用户正在访问您的站点时,此方法非常有用。