2012-03-30 107 views
8

我在我的ruby on rails應用程序中使用'devise'進行密碼驗證。一旦我成功登錄並關閉瀏覽器並打開一個新的瀏覽器窗口,我仍然登錄。假設我正在使用Chrome,我關閉了Chrome的所有實例,然後打開一個新窗口。我仍然登錄。當我在做IE和Firefox時也是如此。如何清除瀏覽器關閉的設計會話?

我會在窗口關閉並且打開一個新的窗口應該建立服務器和瀏覽器之間的新會話是不是?如果不是我如何實現這一目標?

我曾嘗試單擊瀏覽器窗口的onbeforeunload事件上的註銷按鈕,但它不起作用,因爲它在任何表單提交或鏈接單擊時註銷應用程序。

window.onbeforeunload = function() { 
    $('#logout_cls').click(); 
}; 

並試圖發送AJAX請求會話控制器銷燬清除會話的操作。

jQuery(window).bind(
    "close", 
    function(event) { 
      $.ajax({ 
      type: 'DELETE', 
      dataType: 'json', 
      url: $('#logout_cls').attr('href') 
      }); 
    }); 

但這一切都沒有奏效。

回答

2

這實際上是一個功能。 Facebook和幾乎所有使用身份驗證的網站都是通過使用cookie來完成的。

設計的選項可記住「管理生成和清除用於從保存的cookie中記住用戶的令牌」。如果您不想要,請從用戶模型中刪除remember_token字符串和remember_created_at datetime,並從登錄頁面中刪除Remember Me按鈕。

+0

我已經禁用了可記住的策略。這裏是我的模型是如何:設計:database_authenticatable,:可恢復,:可跟蹤,:validatable 想法? – user380692 2012-03-30 11:49:03

+0

轉到'db \ schema.rb'。檢查你的用戶表。它是否有一個名爲'remember_created_at'或'remember_token'的屬性?如果有,那麼你必須刪除它們。 – Ashitaka 2012-03-30 15:19:33

+0

你是否設法解決這個問題? – Ashitaka 2012-04-10 02:55:24

6

原來問題在於我的session_store是如何配置的。

MyApp::Application.config.session_store :active_record_store, 
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours} 

我刪除的選項,這個問題得到了解決。

我還有一個問題,那就是刪除選項是否有任何潛在風險?我沒有在會話中存儲任何重要數據,但輸入了我不想公開的數據。

我的應用程序將在幾天內上線,這對獲得答案是非常有幫助的。我搜索了一個小時左右的東西,但沒有太多的運氣。

謝謝

+4

如果你還有其他問題,你應該把它作爲一個單獨的問題發佈(可能帶有這個鏈接)。 – 2014-02-18 22:55:50

相關問題