我有一个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”。
答案 0 :(得分:5)
您需要使用单独的浏览器。您正在使用会话来识别用户,并且会话与浏览器中的cookie匹配从上面的评论中,这是发生的事情
以steve身份登录 - >会话已创建 - > steve存储为用户名 - > cookie返回浏览器
在新窗口中,以frank登录 - >会话已存在,请将用户名重命名为frank。
在第一个窗口刷新。 - >会话用户名没有坦率 - >根据该用户名返回数据。
新的IE窗口都共享相同的上下文。这意味着如果一个窗口获得一个cookie,它们都会。有两种方法(实际上是3种)。
完成上述操作后,请再次登录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 会话,但所有会有不同的值,因为你提供的数据或操作句柄会有所不同。
希望这有助于您理解。