如何在外部启动后将会话数据保存在独立的Web应用程序中?

时间:2016-07-29 20:32:01

标签: asp.net-mvc vb.net asp.net-mvc-5 mobile-website iphone-standalone-web-app

我有一个MVC 5移动网站,我试图制作一个在iPhone上全屏运行的独立移动网络应用程序。一切正常,直到应用程序启动外部链接,例如,在Safari中启动。返回到Web应用程序后,会话数据似乎消失,并且分配了新的会话ID,在外部启动之前消除了先前用户进度的任何现有跟踪。但是,用户名保持不变并“登录”。如何持久保存Session数据需要做什么?

我已经在这几个小时了,谷歌搜索和尝试不同的方法,但无济于事,我的头在旋转。类似的帖子是HERE,但我的问题是会话数据。

非常感谢任何帮助/方向。

更新1 似乎这种行为仅限于iOS - 目前在9.3.3上进行测试。无论是使用状态栏中的"返回[App]左上角链接还是双击主页按钮返回WebApp,都会出现相同的行为。 Android操作系统似乎运行得很好。 Go figure。我们正在使用cookies。

2 个答案:

答案 0 :(得分:1)

所以这是一个“Hail-Mary pass”,但它有效......只是在javascript中保存ASP.NET_SessionId cookie。它可能在其他地方有效,但这就是我所做的:

在_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();
        }

很奇怪,它有效!希望它可以帮到某人。

答案 1 :(得分:0)

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为您解决问题的优秀而简单的解决方案我无法在其他地方找到答案!