SO 大师
我已经在 iOS 主屏幕上发布了一个网络应用程序,并且希望每次打开该应用程序时都不必登录。所以我试图将 cookie 推送到 LocalStorage。
我正在使用以下代码尝试将我的 cookie 存储在移动网络应用程序的 LocalStorage 中(从 iphone 网络应用程序 ruby gem 复制的代码)。但不知何故它不起作用。有什么建议吗?
谢谢。
<script type="text/javascript">
(function(){
var RESEND_REQUEST = {{RESEND}};
function isFullScreen(){
return navigator.userAgent.match(/WebKit.*Mobile/) &&
!navigator.userAgent.match(/Safari/);
}
if(isFullScreen()){
if(document.cookie == ''){
var storedValues = localStorage.getItem('__cookie__');
if(storedValues){
var values = storedValues.split(';');
for(var i=0; i < values.length; i++)
document.cookie = values[i];
}
document.cookie = '_cookieset_=1';
if(RESEND_REQUEST){
window.location.reload();
}
}
var lastCookie = null;
setInterval(function(){
if(lastCookie != ''+document.cookie){
lastCookie = ''+document.cookie;
localStorage.setItem('__cookie__', ''+document.cookie);
}
},1000);
}
})()
最佳答案
上面的代码确实有一些东西
1。 if(document.cookie == '')
上面的语句并不总是假设返回真值,即使您第一次从 iOS 主屏幕打开您的 web_app,即 document.cookie 确实包含一些值(虽然是垃圾但仍然)甚至从主屏幕打开(至少我发现了什么)。我敦促你用 alert 提示相同的内容
在遇到上面提到的if 子句
之前,类似alert(document.cookie)
如果是(document.cookie 确实包含一些值
)那么我猜你需要像这样修复上面的 if 子句
> if(!document.cookie.match(/_session_id/) ) {
> // Rest of the code goes here
> }
如果你使用 ActiveRecord::Base.session_store
或
> if (!document.cookie.match(/{{YOUR SESSION KEY}}/) {
> // Rest of the code goes here
> }
如果使用 Cookie Store,您的 session key “可以通过查看 config/initializer/session_store.rb
文件找到以下 key
2。注意下面的代码
localStorage.setItem('__cookie__', ''+document.cookie)
阅读时确实有道理,但其中有曲折 除了 document.cookie 包含应用程序的 cookie 之外,一个人会维护 并由浏览器存储,但我注意到 document.cookie 结果并不相同
例如浏览器为我的应用程序存储了以下 cookie
“__cookieset=1;KBD=0en-3;_session_id=896c455928f3dd9e7bb0b660efb7063c”
但是当检查 document.cookie 时我发现它包含
"__cookieset=1;KBD=0en-3;"
注意 document.cookie 不包含 "_session_id=896c455928f3dd9e7bb0b660efb7063c"
哪个是必须的,因为它被各种授权 gem(devise 或 authlogic) 用于确定当前用户是否具有有效 session ?
所以我请求你存储从 Rack::Request.new(env)
获取的请求对象中的 cookie
进入本地存储
3。 中间件放置确保您将中间件放置在正确的位置。
如果你使用 ActiveRecord::Base.session_store 我想可以找到相同 gem 的补丁代码 here解决你的问题
关于html - 使用 LocalStorage 在移动 Web 应用程序中存储 Cookie 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381632/