Сессия не работает - PullRequest
       4

Сессия не работает

0 голосов
/ 20 мая 2018

Итак, я пытаюсь сделать веб-приложение.При регистрации я требую от пользователя ввести свой опыт работы.При этом я проверяю, совпадает ли промежуток времени, в течение которого работал пользователь, с ранее введенными промежутками времени, просто чтобы предупредить его об этом.Для этого я использую контроллер и JS-скрипт.

Это мой метод контроллера:

public void TimeCheck()
    {
        string time = Request.QueryString.ToString();

        using (ITExpertsContext db = new ITExpertsContext())
        {
            int id = db.Users.FirstOrDefault(x => x.Email.Equals(User.Identity.Name)).UserId;

            List<WorkingAt> currentHistory = db.WorkingAts.Where(x => x.UserId == id).ToList();

            TimeFrame frame = new TimeFrame();

            frame.Since = DateTime.Parse(time.Split('&')[0].Split('=')[1]);
            frame.Until = DateTime.Parse(time.Split('&')[1].Split('=')[1]);

            foreach (WorkingAt w in currentHistory)
            {
                if ((w.Since < frame.Until && w.Until > frame.Until) || (w.Since < frame.Since && w.Until > frame.Since))
                {
                    Session["Time"] = "1";
                    return;
                }
            }

            Session["Time"] = "0";
        }
    }

И это мой метод JS с точки зрения:

function TimeCheck() {
            var request = new XMLHttpRequest();

            request.open("GET", "/account/TimeCheck/?since=" + $("#Since").val() + "&until=" + $("#Until").val());

            request.send();

            request.onreadystatechange = function () {
                if (request.status == 200 & request.readyState == 4) {
                    if (sessionStorage.Time == "1") {
                        var choice = confirm("The time you selected overlaps with your previous working experience. Do you still want to add it?");
                        if (choice == true) {
                            return true;
                        }
                        else {
                            return false;
                        }
                    }
                    else {
                        return false;
                    }
                }
            }
        }

Проблемапри этом мой сеанс вообще не меняется, он же не существует.Это хорошо работает, когда я установил его из JS (для тестирования).Что я делаю неправильно?

Я использую последнюю версию VS 2017 версии 15.7, поэтому я предполагаю, что мой MVC равен 5.2.3, если это необходимо знать.

РЕДАКТИРОВАТЬ: код в контроллере достигаетконец без проблем.Я сделал отладку контроллера построчно, и он работает так, как я его разработал.Непосредственно перед «возвратом» я попытался прочитать сеанс [«Время»], и он показывает, что он там.Как только выполнение возвращается к JS, браузер не показывает, что есть данные сеанса под ключом «Время», и поэтому мой оператор «if (sessionStorage.Time ==« 1 »)» не имеет смысла.

1 Ответ

0 голосов
/ 20 мая 2018

sessionStorage определяется в спецификации HTML5.только на стороне клиента, поэтому установка переменной Session на сервере не влияет на клиентскую часть sessionStorage.См .: Существует ли HTML5 sessionStorage на сервере или клиенте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...