2015-02-23 84 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