我有一个MVC 5移动网站,我试图制作一个在iPhone上全屏运行的独立移动网络应用程序。一切正常,直到应用程序启动外部链接,例如,在Safari中启动。返回到Web应用程序后,会话数据似乎消失,并且分配了新的会话ID,在外部启动之前消除了先前用户进度的任何现有跟踪。但是,用户名保持不变并“登录”。如何持久保存Session数据需要做什么?
我已经在这几个小时了,谷歌搜索和尝试不同的方法,但无济于事,我的头在旋转。类似的帖子是HERE,但我的问题是会话数据。
非常感谢任何帮助/方向。
更新1 似乎这种行为仅限于iOS - 目前在9.3.3上进行测试。无论是使用状态栏中的"返回[App]左上角链接还是双击主页按钮返回WebApp,都会出现相同的行为。 Android操作系统似乎运行得很好。 Go figure。我们正在使用cookies。
答案 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为您解决问题的优秀而简单的解决方案我无法在其他地方找到答案!