2010-11-16 107 views
1

如何禁止頁面緩存我是設計一個購物車,有兩個網頁,在軌道上

首先是結賬網頁,如果用戶使用返回按鈕,第二個是order_success頁

在webbrowser上,用戶進入order_success頁面後,它將返回到結賬頁面。

,所以我想找到一些方法來禁止讓使用者回去,

有沒有在軌道上一些方法來archieve呢?

回答

1

「我知道這一點,但用戶將使用Go Back按鈕,如果在客戶端緩存一些, 用戶仍然可以看到一些&補辦,這是不是我所期望」 [是什麼意思?]

如果要防止用戶重新提交同樣的請求,您可以添加一個隱藏字段(只是一些隨機的),並將其存儲在後一個會話請求已被公關ocessed:

if params[:token] == session[:used_token] 
    render_already_processed_notice 
    return 
end 
if @cart.save 
    session[:used_token] = params[:token] 
.... 

如果您在請求中使用購物車的ID,那麼你只可以使用車模型的狀態:

@cart = Cart.find(params[:id]) 
render_some_notice and return if @cart.done? 
.... 
@cart.done = true 
@cart.save 

個人而言,我不會創建一個結賬和order_success頁面。我只會創建一個頁面 - 購物車狀態,根據模型狀態,我只會顯示不同的內容。

如果一些動作可能只需要執行一次(如關閉購物車或敲定交易)是沒有問題的:render_something and return if @cart.already_closed?

頁上,在那裏多次提交是可能的,但並不總是受歡迎(如添加產品到用戶可以添加兩個相同的產品),你可以做兩件事:

1)使用提到的標記,它會檢測用戶剛剛按下F5,並問他是否真的應該做兩次行動,或

2)只接受請求,但始終提供您使用「回滾」操作的方法(允許他從購物車中刪除產品),並確保在最終驗收前驗證購物車內容。

1
  1. 明確的購物車
  2. 將用戶重定向到新的行動

購買成功後,你應該明確的購物車,然後將用戶重定向到一個新的動作。

在你order_controller.rb

def create 
    @shopping_cart = nil 
    redirect_to some_path 
end 
+0

我知道這一點,但用戶將使用返回按鈕,如果客戶端中有一些緩存,用戶仍然可以看到某些東西並重新提交,這不是我除了 – mlzboy 2010-11-16 07:22:24