在VB.NET中将会话变量数据从一页丢失到另一页

时间:2019-03-20 21:54:06

标签: asp.net vb.net session

我对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给了我一个空的数据集,探查器没有检测到来自应用程序的调用。我以为使用会话变量非常简单,但是很明显,我缺少了一些东西。

感谢您的帮助, 比利

2 个答案:

答案 0 :(得分:1)

一种可能性(也是唯一一种在我们掌握的信息很少的情况下就可以猜到的可能性)可能是response.redirect导致应用程序由于异常而终止。

重定向时,您总是希望传递一个false,然后调用完成请求。

Response.Redirect(urlstring, False)
Response.CompleteRequest()

不遵循这些步骤可能会导致异常,从而可能导致会话中断。

另外,解析虚拟路径,因为某些浏览器(尤其是移动设备)可以将这些重定向完全视为新请求,从而生成新的会话令牌。

Dim urlstring As String
urlstring = Page.ResolveUrl("~/default.aspx")

也就是说,这种情况下有许多possible causes

  1. 应用程序池重新启动
  2. 应用程序域已重新启动
  3. 代码意外更改值
  4. AV修补文件
  5. 部署到Web场

使用上面提供的描述,我们只是没有足够的信息来真正解决问题。

答案 1 :(得分:0)

谢谢ADyson,Stephen Wrighton和其他竭尽全力帮助我解决这一问题的人。通过添加写入服务器上日志文件的代码,我能够发现发生了什么。找到了日志代码here。我发现我从未到达设置会话变量的代码,这就是它从未在第二页上填充的原因。我试图使用Environment.UserName获取用户的登录名,该登录名将返回当前登录到操作系统的用户的用户名。但是我真正想做的是获得访问我的网站的用户的登录名。为此,我使用了User.Identity.Name。当您需要知道Active Directory域中的哪个用户正在访问您的站点时,此方法非常有用。