html - 使用 LocalStorage 在移动 Web 应用程序中存储 Cookie 时出现问题

标签 html session cookies local-storage

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);

}
})()

最佳答案

上面的代码确实有一些东西

1if(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/

相关文章:

session - 如何防止 ashx 重置 session 超时?

asp.net-mvc - Asp.Net mvc session 与缓存

java - 在 web.xml cookie-config 中为 Tomcat 定义同站 cookie

javascript - 是否有任何 cookie 可以指示用户是否已登录 Google Chrome 浏览器?

javascript - 旋转表格中的图像

javascript - Ajax上传仅将第一个文件传递给php文件

php - 将文本从 php 文件发送到 html 中的变量

html - 面向对象的 CSS - 定义颜色

ruby-on-rails-3 - Rails 3 从另一个 Controller 渲染部分(错误:ActionView::MissingTemplate)

cookies - 如何在 Selenium 中的 open() 之前创建 cookie