【问题标题】:Session variable gets lost after publishing (works on dev machine)发布后会话变量丢失(在开发机器上工作)
【发布时间】:2013-03-27 22:56:44
【问题描述】:

我被要求完成的一个快速项目不需要疯狂的安全性,因此,我实现了一个简单的登录屏幕,可以根据数据库检查用户名和密码。

User u = new User();
if (u.AuthenticateUser(txtUsername.Text, txtPassword.Text))
   Session.Add("UserSeshAuthenticated", true);                    

Response.Redirect("Dashboard.aspx");

所有其他页面共享一个 MasterPage 并在 Page_Load 事件中:

if ((Session["UserSeshAuthenticated"] == null) || ((bool)Session["UserSeshAuthenticated"] == false))
        {
            fw.Write("UserSeshAuthenticated has been lost or something");

            string path = HttpContext.Current.Request.Url.AbsolutePath;
            Response.Redirect("Login.aspx?retpath=" + path);
        }
        else
        {
            lblLoggedInUsername.Text = Session["UserSeshAuthenticated"].ToString();
        }

这一切在我的开发机器上运行良好,但是当我将它发布到我的服务器时,当我的 MasterPage 加载时,它已经丢失了会话变量。

任何人都可以帮忙吗?...我应该今天下午直播,但我没想到我会遇到这个问题!!!

任何帮助表示赞赏。非常感谢。

【问题讨论】:

  • 在服务器上,这个应用程序是在服务器根目录下运行的吗?如果它在文件夹中运行,该文件夹是否在 IIS 中配置为应用程序/包?
  • 应用程序作为应用程序运行,但不在服务器根目录中...它在 DefaultWebSite 内的另一个应用程序内的应用程序下运行。 IIS > 站点 > 默认网站 > App1 > MyProblemApp
  • 它不是在网络场或负载平衡系统上吗?
  • 不,这两个都没有。

标签: c# session authentication session-variables


【解决方案1】:

在您的登录代码中,您将“UserSeshAuthenticated”添加到会话中,而不是用户对象。如果函数 u.AuthenticateUser() 将自身的副本添加到会话中,那可能是您的问题。尝试将其添加到结果块中。像这样:

User u = new User();
if (u.AuthenticateUser(txtUsername.Text, txtPassword.Text))
{
   Session.Add("UserSeshAuthenticated", true);
   Session.Add("oUser", u);

   Response.Redirect("Dashboard.aspx");
}

【讨论】:

  • 嗨 tgolisch,感谢您的帮助。不要担心那个用户对象,这不是真正的问题。这是会话完全丢失的事实。我已经删除了不必要的代码行。
  • 只是为了确认:您正在检测会话丢失,因为在您登录后,您会被退回到 login.aspx 页面。正确的? ...哦,还有,您是否注意到无论登录成功与否,您的 Response.Redirect 都会发生? (我更新了我的代码示例以显示您可能想要尝试的更改)
  • u.AuthenticateUser 函数对会话没有任何作用....我尝试将整个用户对象添加到会话中,但没有任何改变....我正在检测/调试会话丢失通过以关键间隔写入文本文件并随后检查来改变变量.....另外,“您是否注意到无论登录是否成功,您的 Response.Redirect 都会发生?”不,我没有注意到,我的 IF 语句有什么问题?
  • “我的 IF 语句有什么问题” - 在您的登录页面上,在“if (u.AuthenticateUser(txt...”) 之后,因为它后面没有任何大括号,只有Session.Add() 语句由 IF 控制。重定向会以任何一种方式发生(如当前所写)。
  • 啊,是的 - 对不起 tgolisch - 我以为你的意思是检查会话变量的 if 语句。
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2014-03-24
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多