【发布时间】:2011-01-20 00:44:41
【问题描述】:
我将用户对象存储在会话中,将它们拉出控制器,有时还会将一些数据写入其中。但是当用户同时发帖时,由于某种原因,会话会变得混杂。
有人知道这怎么可能吗?
典型帖子:
[HttpPost]
public ActionResult Index(QuestionModel model, FormCollection collection)
{
var person = ((Person)Session["Person"]);
if (!ModelState.IsValid)
{
ModelState.Clear();
ModelState.AddModelError("", Global.Global.error);
return View(new QuestionModel(person.page, (CultureInfo)Session["culture"]));
}
person.page = model.Page;
while (person.Answers.Count > model.Page - 1)
{
person.Answers.RemoveAt(person.Answers.Count - 1);
}
var answer = new Answer() { answer = model.ChosenAnswer, Question = "Q" + person.page };
person.Answers.Add(answer);
if (!CheckForNextPage(person.page)) { person.hasFinishedQuestions = true; return RedirectToRoute("Result"); }
person.page++;
return View(new QuestionModel(person.page, (CultureInfo)Session["culture"]));
}
我在每个页面上都回显会话 ID,当几个用户使用该网站时,他们会得到彼此的会话 + 会话 ID ...
@update: 3位有经验的开发者找了2天,还是没有解决。已经删除了大约 95% 的代码,仍然是同样的问题。服务器发回来自另一个会话的响应
【问题讨论】:
-
Application_AcquireRequestState session is shared between users 的可能副本 - 编辑您的原件而不是制作新的。
-
我没有在这里使用 Application_AcquireRequestState。我从该函数中删除了代码,但我仍然需要知道它是否与 @jfar 两者有关:非常有建设性,尽管有 2 个不同的问题具有相同的结果
-
我无法发布我的代码,大约有 20.000 行......你对什么代码感兴趣
-
@Nealv - 我不明白。您删除了代码,但您想知道它是否与两者有关?
-
关闭了上一个问题作为欺骗,所以请没有人投票关闭作为欺骗这个问题。至于发生这种情况的原因......它不应该。绝不。我猜你在代码的其余部分中使用了静态。您不应该在您希望由不同会话使用的任何对象中将任何东西标记为“静态”。
标签: asp.net-mvc session session-state session-variables