2015-02-23 109 views
0

我有一個ColdFusion站點,我需要根據用戶如何顯示不同的文本進入頁面。需要幫助瞭解Coldfusion URL引用

即,

<cfif user comes from sitemap.cfm> 
    Display this text 
<cfelse> 
    display this text 
</cfif> 

有人能指出我在正確的方向?

回答

6

你想看看CGI環境變量,特別是HTTP_REFERER(和不,這不是拼寫錯誤 - 或者,我應該說,CGI變量的名稱拼寫錯誤)。

我相信HTTP_REFERER值將包含整個URL,包括查詢字符串,所以你必須分析它 - 或者使用CONTAINSfindNoCase()<cfif>聲明:

<cfif findNoCase("sitemap.cfm", cgi.HTTP_REFERER)> 
    Display this text 
<cfelse> 
    display this text 
</cfif> 

這是重要的是要注意,如果您從HTTPHTTPS,則HTTP_REFERER的值將爲空 - 反之亦然,我相信。

+4

...和HTTP_REFERER也可以阻止或欺騙。因此,與任何客戶提供的價值一樣,不要依賴任何重要的東西。 – Leigh 2015-02-23 22:49:31

+0

不幸的是......這是真的...... – user1199680 2015-02-23 23:15:56

1

使用CGI.HTTP_REFERERDavid Faber提到的一種可能的解決方案。這是最簡單的方法,我會推薦它。

如果您因爲某種原因不信任CGI.HTTP_REFERER值,那麼另一種解決方案是實現一種跟蹤用戶(更確切地說是他的http請求)的方式。例如,你可以:

  • 使用在Session範圍(而不是Request範圍)一個(鍵,值)e.g通過在onRequestStart(String targetPage)實現它你Application.cfm內(或直接在sitemap.cfm?)。然後根據targetPage的值和SESSION[key]的值,做你需要或想做的事情。
  • 使用相同的技術,但與COOKIE範圍(或與cfcookie?)。依賴於HTTP請求的工作流程...

我想可能有其他跟蹤技術,它是給你:-)

+0

我不認爲** REQUEST **作用域會起作用,因爲它被每個頁面銷燬 - 它不會在下一頁(這是我認爲, OP正在尋找什麼)。 ** SESSION **是一個更好的方式來做到這一點。 – 2015-02-23 23:17:56

+0

你是對的!像SESSION [「sitemap_visited」]更好;-) – user1199680 2015-02-23 23:20:30