Сеанс MVC.net смешивается между пользователями - PullRequest
2 голосов
/ 05 января 2011

Я храню пользовательские объекты в сеансе, вытаскиваю их в контроллеры и иногда записываю в них некоторые данные. но когда пользователи публикуют сообщения одновременно, сессии почему-то смешиваются.

Кто-нибудь знает, как это возможно?

Типичный пост:

  [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"]));
    }

Я отображаю идентификатор сеанса на каждой странице, и когда несколько пользователей используют веб-сайт, они получают сеанс друг друга + sessionid ...

@ обновление: 3 опытных разработчика искали проблему в течение 2 дней, но до сих пор не нашли решения. уже удалили около 95% кода, все та же проблема. сервер отправляет ответы из другого сеанса

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Мы «решили» это.Мы на самом деле не решили, но мы скопировали все исходники в новый проект, перекомпилировали, и все заработало.До сих пор мы до сих пор не знаем, почему и как произошла эта ошибка ...

2 голосов
/ 05 января 2011

Это невозможно.Так что это мое предположение: вы проверяете это неправильно, вы используете разные вкладки из одного и того же браузера.Некоторые люди не знают, что это не создает другой сеанс.

Попробуйте проверить это на 2 разных браузерах (например, Firefox и Chrome), так как они не будут совместно использовать сеанс (так как идентификатор сеанса обычно сохраняетсяв файле cookie).

Пожалуйста, сообщите, если это так.

...