asp.net多个用户?

时间:2012-05-23 16:42:43

标签: asp.net session

我有一个asp.net c#web应用程序,用户可以登录并查看上周的日程安排,该日程安排在远程数据库中。登录该站点仅包含一个SQL检查,以查看用户名和密码是否与uname&传递数据库中的记录。登录后,他们可以操作计划的时间条目等。在调试时,我以两个不同的用户身份登录。用户B在他的表单上拥有所有用户A的东西。我编写的程序就像我正在编写一个常规的c#应用程序一样,并没有真正考虑过同时使用该网站的多个人。我想我认为实例处理是自动的?我只和asp.net一起工作了一个星期左右,而且没有多少支持。

我的主要问题是,如果我的网站上同时有多个用户,我该如何将他们的会话分开?


更新 - 添加会话变量后

这是我获取用户信息的sql语句。现在,使用会话变量:

string sqlquery = "SELECT FirstName, LastName, OperatorID FROM operators WHERE EmpID = '" + sql + "'";
        using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["EobrConnectionString"].ConnectionString))
        {
            conn.Open();
            using (MySqlCommand comm = new MySqlCommand(sqlquery, conn))
            {
                using (MySqlDataAdapter adapter = new MySqlDataAdapter(comm))
                {
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        Session["Fname"] = dr[1].ToString();
                        Session["Lname"] = dr[2].ToString();
                        Session["opID"] = dr[3].ToString();
                     }
                }
            }
        }

在主菜单页面中我有:

protected void Page_Load(object sender, EventArgs e)
{
    firstname = Session["Fname"].ToString();
    lastname = Session["Lname"].ToString();
    lblwelcome.Text = "Welcome, " + firstname + " " + lastname + ", make your selection below.";
}

当用户A登录时,他们会看到他们的名字“Frank Drebbin”。当用户B登录时,他们会看到他们的名字,“杰克加斯顿”。但现在,如果我重新加载第一个用户页面,他们会将名称视为“Jake Gaston”。

4 个答案:

答案 0 :(得分:5)

您需要使用单独的浏览器。您正在使用会话来识别用户,并且会话与浏览器中的cookie匹配从上面的评论中,这是发生的事情

以steve身份登录 - >会话已创建 - > steve存储为用户名 - > cookie返回浏览器

在新窗口中,以frank登录 - >会话已存在,请将用户名重命名为frank。

在第一个窗口刷新。 - >会话用户名没有坦率 - >根据该用户名返回数据。

新的IE窗口都共享相同的上下文。这意味着如果一个窗口获得一个cookie,它们都会。有两种方法(实际上是3种)。

  • 使用物理上不同的机器
  • 使用2个broswers,例如IE&火狐
  • 在IE中按alt以获取菜单,然后从文件菜单中单击新会话。这使得一个物理上独立的窗口不会共享cookie(尽管没有任何迹象表明这一点)

完成上述操作后,请再次登录Steve&弗兰克&你应该看到他们互不干涉。

答案 1 :(得分:2)

我猜想问题是,虽然会话是分开保存的(你在Session中存储东西,对吗?),从数据库加载数据的查询没有考虑用户名。

查看加载任务的SQL查询,看看您是否在该查询中包含用户名(或用户ID)。如果您需要帮助,请随时发布查询。

因此,要直接回答您的主要问题,如果您将内容存储在会话中,它们将与其他会话正确隔离。但是,错误的数据,错误的数据输出。

答案 2 :(得分:0)

修改 使用另一个浏览器来测试这个,你不能在另一个选项卡中使用相同的浏览器,或者在另一个窗口中使用相同的浏览器,它几乎将是同一个会话

如果您使用“会话”来保存用户的数据,那么它们是分开的,这意味着您应该将每个用户数据存储到“会话”或cookie中。

注意: 您应该保持并发http://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.80).aspx

答案 3 :(得分:0)

解决方案非常简单(用户不同浏览器同时),如IE,Firefox,Chrome等........

您没有使用transact SQL,因此需要打扰并发性,

但是当你登录当前的浏览器时,如果你使用相同的浏览器就会创建一个会话,它仍然会有那个会话,

如果您使用其他浏览器,则浏览器将具有会话但值不会相同。

e.g。

现在每部手机都有不同的浏览器,如果你有100部手机,这意味着你可以存储100个相同的 USER 会话,但所有会有不同的值,因为你提供的数据或操作句柄会有所不同。

希望这有助于您理解。