Как сохранить данные сеанса в отдельном веб-приложении после внешнего запуска?

У меня есть мобильный веб-сайт MVC 5, который я пытаюсь сделать автономным мобильным веб-приложением, работающим в полноэкранном режиме на iPhone. Все работает хорошо, пока приложение не запустит внешнюю ссылку, которая, например, запустится в Safari. При возвращении в веб-приложение данные сеанса, кажется, исчезают, и назначается новый идентификатор сеанса, стирающий все существующие следы предыдущего пользовательского прогресса до внешнего запуска. Однако имя пользователя остается нетронутым и «вошел в систему». Что мне нужно сделать, чтобы сохранить данные сеанса?

Я занимаюсь этим уже несколько часов, гуглю и пробую разные подходы, но безрезультатно, и у меня кружится голова. Аналогичный пост находится ЗДЕСЬ, но моя проблема - данные сеанса .

Любая помощь/направление будет принята с благодарностью.

ОБНОВЛЕНИЕ 1 Похоже, такое поведение ограничено iOS — в настоящее время тестируется на 9.3.3. Такое же поведение, независимо от того, используется ли ссылка «Вернуться к [Приложению]» в верхней левой части строки состояния или дважды нажмите кнопку «Домой», чтобы вернуться в WebApp. Операционные системы Android, похоже, работают нормально. Поймите. Мы используем файлы cookie.


person HumbleBeginnings    schedule 29.07.2016    source источник


Ответы (2)


Так что это был «пропуск Богородицы», но он сработал ... просто сохраните файл cookie ASP.NET_SessionId в javascript. Возможно, это сработало в другом месте, но вот что я сделал:

В _Layout.vbhtml я добавил это в $(document).ready:

        if (window.navigator.standalone || window.matchMedia('(display-mode: standalone)').matches) {
            document.cookie = "ASP.NET_SessionId=@(Session.SessionID); " + extendTimeStr(5);            
        }

вместе с функцией:

        function extendTimeStr(extMins) {
            var d = new Date();
            d.setTime(d.getTime() + (extMins*60*1000));
            return "expires="+ d.toUTCString();
        }

Волшебным образом это сработало! Надеюсь, это поможет кому-то.

person HumbleBeginnings    schedule 31.07.2016

Обновление для AspNetCore 2.0:

$(document).ready(function () {
            if (('standalone' in window.navigator) && window.navigator['standalone']) {
                var cookie = '@(Context.Request.Cookies[".AspNetCore.Identity.Application"])';
                document.cookie = ".AspNetCore.Identity.Application=" + cookie + "; " + extendTimeStr(5);
            }
        })

Спасибо @HumbleBeginnings за прекрасное и простое решение проблемы, на которую я не могу найти ответы больше нигде!

person Tim    schedule 28.09.2017
comment
Рад помочь, @Tim. :-) Спасибо за обновление AspNetCore 2.0. - person HumbleBeginnings; 29.09.2017