2016-01-22 14 views
2

登錄到應用程序,然後完全關閉瀏覽器後,我重新打開瀏覽器,期望被註銷。但是我仍然登錄?Rails教程(M.Hartl)第3版,第8章,爲什麼應用程序忘記登錄狀態?

我在8.2.3 Changing the layout links以及除了上述之外,應用程序看起來和按預期運行。代碼也是來自教程。我認爲這是相關文件:

應用程序/傭工/ sessions_helper.rb

module SessionsHelper 

    # Logs in the given user. 
    def log_in(user) 
    session[:user_id] = user.id 
    end 

    # Returns the current logged-in user (if any). 
    def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
    end 

    # Returns true if the user is logged in, false otherwise. 
    def logged_in? 
    !current_user.nil? 
    end 
end 

應用程序/控制器/ sessions_controller.rb

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     redirect_to user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    end 
end 

回答

5

通常,關閉瀏覽器時會清除session,因此在這種情況下應該自動註銷。無論如何,有些瀏覽器會記住你的會話,但正如this footnote中所討論的那樣,這可能是這裏發生的事情。

+0

這是幫助。我認爲我的Chrome操作系統瀏覽器可能存在問題,因爲即使將設置從「繼續停留的位置」改爲「離開後繼續」,我也會遇到問題。但是,在Windows上使用常規Chrome瀏覽器時,此修補程序可以運行。而IE11也不錯。至少我知道我沒有錯誤地複製你的代碼。 –

0

登錄進入後應用程序,然後完全關閉瀏覽器,我重新打開瀏覽器,期望被註銷。但是我仍然登錄?

因爲您仍然登錄您的應用程序。您的瀏覽器通過用於跟蹤會話的cookie記錄登錄數據。

要註銷,您可以使用教程中介紹的註銷鏈接,也可以清理瀏覽器緩存。

+0

該應用程序(迄今爲止)的設計使其在關閉瀏覽器時自動註銷,這是預期的行爲。 –

+0

你在查看8.3節嗎?在該部分中,本教程向您解釋如何添加註銷方法。如果沒有註銷方法,瀏覽器會緩存會話。 – Lorenz

+0

查看8.2.3節的末尾,它說:_「如果你完全退出瀏覽器,你也應該能夠驗證應用程序忘記你的登錄狀態」_ –

0

因爲你有一個cookie,就像你在每個頁面會話中所喜歡的那樣,這就是創建的方式。它們被存儲。如果你想刪除,只需進入配置,刪除cookies

0

根據Mhartl的回答,如果您使用的是Chrome瀏覽器(我不知道爲什麼)關閉瀏覽器後,用戶將不會被註銷,但是當您通過Firefox打開您的應用程序時,用戶將被記錄如第8章所述自動退出(再次不知道如何)。

相關問題