2011-09-11 47 views
3

大師的SO故障使用本地存儲來保存的Cookie在移動網絡應用程序

我已經發布了一個web應用程序的iOS主屏幕&想不必每個應用程序打開時自動登錄。所以我試圖將Cookie推入LocalStorage。

我正在使用下面的代碼來嘗試將我的Cookie存儲在移動Web應用程序的LocalStorage中(從iPhone Web應用程序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); 

} 
})() 

+0

檢查是否在運行同樣的問題,因爲我的http://計算器。 com/questions/9075530/data-stored-into-localstorage-isnt-available-afterwards and http://stackoverflow.com/questions/9077101/iphone-localstorage-quota-exceeded-err-issue如果是,那麼可能的原因是爲什麼上面的代碼不工作 – Viren

回答

0

有幾個東西,在上面的代碼

倒是可以。 if(document.cookie == '')
上述聲明並不總是想還真甚至當你從iOS主屏幕打開你的web_app爲首次即document.cookie中確實含有一定的價值(雖然垃圾,但仍然)甚至從主屏幕打開(至少我發現了什麼)。我勸你運行到上面提到之前提示同樣具有警示

喜歡的東西alert(document.cookie)if clause 如果是(document.cookie does contain some value),那麼我想你需要修復上述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存儲「可以找到以下密鑰我看在config/initializer/session_store.rb文件

。由於通知下面的代碼

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

通知該文檔。cookie不包含"_session_id=896c455928f3dd9e7bb0b660efb7063c"

哪一個是必須的?它用於各種授權gem(devise或authlogic)來判斷當前用戶是否有一個有效會話?

所以我請你從存儲請求對象的cookie從Rack::Request.new(env) 獲取到localStorage的

中間件放置確保您將中間件放置在正確的位置。

如果您使用ActiveRecord :: Base.session_store我想同寶石的補丁代碼可以發現here解決你的目的

相關問題