乍一看,我惊讶地发现我对 session cookie 在移动设备上的行为方式的想法被现实覆盖了。
在普通桌面浏览器上,只要浏览器 session 处于事件状态,就会存储 session cookie。如果最后一个浏览器窗口/进程关闭, session 应该关闭。
现在在移动设备上,您几乎不会关闭浏览器应用程序,只需将其发送到后台即可。
我发现我的 Sony Xperia Ray 和 Android 4 session cookie 没有过期,即使我清除了浏览器进程。但在三星平板设备上它会。我不知道 iOS 设备如何以这种方式运行。
这是一个问题!?我应该怎么做才能解决它?
现在,我决定让 cookie 在一天内过期。但我对此不是很满意。
我应该降低生命周期吗?也许到 8 小时?
最佳答案
采用 HTML5 方式并使用 sessionStorage 对您来说有意义吗?
这样您就可以独立于不同设备处理浏览器 session 的方式,因为 HTML5 session 存储是按窗口存储的,因此它仅限于浏览器窗口的生命周期。
基本上所有移动设备都支持 sessionStorage(参见 here),您可以使用 jQuery-Session-Plugin(遵循 this link)之类的框架/插件为您处理 session 数据(并提供回退 为不支持 sessionStorage 的旧浏览器设置 session cookie。
编辑:为了展示 sessionStorage 与 localStorage 的行为,我创建了一个 fiddle (出于演示目的)使用 sessionStorage 存储 div 的宽度,使用 localStorage 存储同一个 div 的高度:
var randomWidth,
randomHeight;
if (!(randomWidth= $.session.get("randomWidth"))) { // assignment
randomWidth = Math.random() * 300;
$.session.set("randomWidth", randomWidth, true);
console.log("just assigned and stored in sessionStorage: randomWidth: " + randomWidth);
} else {
console.log("from sessionStorage: randomWidth: " + randomWidth);
}
if (!(randomHeight= $.domain.get("randomHeight"))) { // assignment
randomHeight = Math.random() * 300;
$.domain.set("randomHeight", randomHeight, true);
console.log("just assigned and stored in localStorage: randomHeight: " + randomHeight);
} else {
console.log("from localStorage: randomHeight: " + randomHeight);
}
$(".test").css({width: randomWidth, height: randomHeight});
查看控制台。您会看到,当您启动客户端浏览器的新 session 时,宽度会发生变化,而高度会保持不变(因为本地存储是按域分配的)。
关于javascript - 在移动 session 中模拟 session cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202521/