簡體   English   中英

Ruby on Rails - request.env ['HTTP_REFERER']返回nil

[英]Ruby on Rails - request.env['HTTP_REFERER'] returns nil

我正在嘗試保存http_referer,以便我可以在用戶登錄后將用戶發送回該URL。現在我的控制器中有一個before_filter,如果尚未通過redirect_to創建會話,則將它們發送到登錄頁面。 但是當我檢查HTTP_REFERER時它是nil(而'REQUEST_URI'確實返回我最初來自的地方)。

謝謝。

HTTP_REFERER是瀏覽器在請求中設置的HTTP標頭,其包含前一網頁的地址,從該網頁跟隨當前請求的頁面的鏈接。 直接導航到頁面時不會設置它。

REQUEST_URI(也可通過request.request_uri() )是用於訪問Rails控制器/操作的統一資源標識符,應始終進行設置

將此調試代碼放入您的視圖中:

<ul>
<% request.env.each do |item| %>
    <li><%= item[0] %> : <%= item[1] %></li>
<% end %>
</ul>

如果未設置HTTP_REFERER,請確保您通過鏈接或重定向導航到該頁面,然后查看是否已設置。

您的瀏覽器也可能沒有設置 HTTP_REFERER標頭。 請確保您沒有影響此的附加組件。 您可以使用名為Tamper Data的漂亮的Firefox附加組件來查看正在發送的標頭。

無論您提出什么解決方案,您都需要能夠處理空的referer案例,因為客戶端可以選擇是否指定它。 (例如,當您使用Safari的隱私瀏覽和Chrome的隱身模式時,它會關閉)

在Rails中,您可以使用redirect_to :back ,如果設置了HTTP_REFERER,則會使用它,否則會引發錯誤。

使用redirect_to:back時,如果沒有referrer,將引發RedirectBackError。 您可以通過挽救RedirectBackError為此案例指定一些回退行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM