在移动会话中模拟会话cookie?

yun*_*zen 16 javascript cookies mobile jquery weinre

我第一眼就惊讶地发现,我对会话cookie在移动设备上的行为方式的看法被现实所推翻.

在普通桌面浏览器上,只要浏览器会话处于活动状态,行为就是存储会话cookie.如果最后一个浏览器窗口/进程已关闭,则应关闭该会话.

现在,在移动设备上,您几乎不会关闭浏览器应用程序,只需将其发送到后台即可.

我在Android 4的索尼Xperia Ray上发现,即使我清除了浏览器进程,会话cookie也没有过期.但在三星平板设备上它会.我不知道iOS设备如何以这种方式运行.

这是个问题!?我该怎么做才能解决这个问题?

现在,我决定让cookie在一天后到期.但我对此并不满意.
我应该降低寿命吗?也许到8个小时?

mar*_*rty 5

您采用HTML5方式并使用sessionStorage是否有意义?

这样,您就可以独立于不同设备处理浏览器会话的方式,因为HTML5会话存储是按窗口存储的,因此它受限于浏览器窗口的生存期。

基本上所有移动设备都支持sessionStorage(请参阅此处),并且您可以有一个类似jQuery-Session-Plugin的框架/插件(按照此链接)为您处理会话数据(并为不支持该功能的旧浏览器提供会话cookie 的后备功能)支持sessionStorage)。

编辑:为了显示sessionStorage与localStorage的行为,我创建了一个小提琴,该小提琴(出于演示目的)使用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});
Run Code Online (Sandbox Code Playgroud)

查看控制台。您将看到,当您启动客户端浏览器的新会话时,宽度将变化,而高度将保持不变(因为本地存储是每个域的)。

这是jsfiddle链接


aar*_*ron 5

我对类似问题的解决方案是将其document.referrer与cookie结合使用.如果用户在您的站点内导航,则继续使用cookie(如果存在),否则将过期或替换cookie.

当用户在您的网站上将浏览器置于后台时,问题仍然存在.如果他们继续浏览并只使用您网站中的链接,则仍会使用该Cookie.