在移动会话中模拟会话Cookie

在移动会话中模拟会话Cookie

本文介绍了在移动会话中模拟会话Cookie?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

$ p

在正常的桌面浏览器上,行为是以存储会话cookie,只要浏览器会话是活动的。如果最后一个浏览器窗口/进程关闭,会话应该关闭。



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



我在我的Sony Xperia Ray与Android 4上发现会话cookie未过期,即使我清除浏览器进程。但在三星平板电脑设备上。我不知道,iOS设备的行为如何。



这是一个问题!我应该怎么做来解决它?



现在,我决定让cookie在一天后过期。但我不是很高兴。

我应该降低生命周期吗?可能需要8小时?

解决方案

如果你使用HTML5方式并使用sessionStorage >?



这样,您可以独立于不同设备处理浏览器会话的方式,因为HTML5会话存储是每个窗口,因此它被限制在



基本上所有移动设备都支持sessionStorage(参见),你可以有一个框架/插件,如jQuery-Session-Plugin(下面的)处理会话数据(并为会话Cookie提供

:为了显示sessionStorage和localStorage的行为,我创建了(为演示目的)使用sessionStorage存储div的宽度,localStorage用于存储同一个div的高度:

  var randomWidth,
randomHeight;
if(!(randomWidth = $ .session.get(randomWidth))){//赋值
randomWidth = Math.random()* 300;
$ .session.set(randomWidth,randomWidth,true);
console.log(刚刚分配并存储在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(刚刚分配并存储在localStorage:randomHeight:+ randomHeight);
} else {
console.log(from localStorage:randomHeight:+ randomHeight);
}
$(。test)css({width:randomWidth,height:randomHeight});

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



以下是


I discovered to my astonishment at the first glance that my thinking of how session cookies behave on mobile devices is overruled by reality.

On normal desktop browsers the behavior is to store a session cookie as long as the browser session is active. The session should be closed, if the last browser window/process is closed.

Now on mobile devices you hardly ever close a browser app, you just send it to the background.

I discovered on my Sony Xperia Ray with Android 4 that the session cookie is not expired, even if I purge the browser process. But on a Samsung Tablet device it would. I don't know, how iOS devices behave in that way.

This is a problem!? What should I do to work around it?

For now, I decided to let the cookie expire in one day. But I'm not very happy with that.
Should I lower the lifetime? Perhaps to 8 hours?

解决方案

Would it make sense for you to go the HTML5 way and use sessionStorage?

This way you could be independent of the way different devices handle browser sessions, since HTML5 session storage is per-window, thus it is limited to the lifetime of the browser window.

Basically all mobile devices support sessionStorage (see here) and you could have a framework/plugin like jQuery-Session-Plugin (follow this link) handle the session data for you (and provide a fallback to session cookies for old browsers that don't support sessionStorage).

EDIT: In order to show the behavior of sessionStorage vs. localStorage, I've created a fiddle that (for demonstration purpose) uses sessionStorage for storing the width of a div and localStorage for storing the height of the same 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});

Look at the console. You will see that when you initiate a new session of your client browser, the width will variate while the height will stay the same (because local Storage is per domain).

Here is the link to jsfiddle

这篇关于在移动会话中模拟会话Cookie?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 20:15