跟踪来自特定来源的用户

时间:2012-07-10 12:30:34

标签: javascript jquery http get tracking

我向向我们发送其他访问者的用户进行促销。这是在客户端上完成的。

我可以使用动态GET参数执行此操作,例如http://www.mysite.com?app_source=user_id或者我可以使用哈希来做到这一点,例如http://www.mysite.com#app_source,user_id

这些方法有任何优缺点吗?

9 个答案:

答案 0 :(得分:8)

为GET请求执行此操作的标准方法是简单地使用查询字符串。

http://www.mysite.com?app_source=user_id

如果您使用网址锚点,例如

http://www.mysite.com#app_source,user_id

锚点部分(#app_source,user_id未发送到服务器

例如,请参阅此related question

这是另一个related question

锚点只是一个客户端标志,用于告诉浏览器在页面上导航的位置。


要解决您的重定向问题,您可以在重定向,添加/删除和所需的键/值对之前处理查询字符串,然后重定向。

PHP允许您使用$_SERVER['QUERY_STRING']

直接访问查询字符串

Rails使用您parse

request.uri

此外,当您看到像facebook.com/#stuff这样的奇特内容时,锚点部分将使用客户端javascript进行处理。所以你可以这样做,但是你将编写一个正在发送普通GET请求的Ajax代码,就像在这个答案的顶部推荐的那样。

为什么要增加复杂性?你只是喜欢#的外观比?更好吗?

答案 1 :(得分:7)

使用?方法。为什么?因为这就是你应该如何在页面之间传递任意数据。

#专门用于页面锚点。

除了语义和最佳实践之外,还有一个实际的原因。想想当用户将访问者发送到页面上的锚点时会发生什么。您将无法使用哈希方法(至少不是以简单的方式)。

所以我会按照here概述的方法:

function $_GET(q,s) {
    s = s ? s : window.location.search;
    var re = new RegExp('&'+q+'(?:=([^&]*))?(?=&|$)','i');
    return (s=s.replace(/^?/,'&').match(re)) ? (typeof s[1] == 'undefined' ? '' : decodeURIComponent(s[1])) : undefined;
}

var app_source = $_GET('app_source');

然后您可以拥有以下网址:http://www.mysite.com?app_source=user_id#anchor

答案 2 :(得分:5)

查询字符串

  • Google Analytics,服务器日志等都会记录网址,这可能有助于以后的分析。
  • 多个网址使缓存变得更加困难,并且很可能会混淆Google

哈希

  • 分析和服务器日志不会看到/注意哈希参数

更多语义处理方法可能是通过查询字符串参数,但它不是很强大。如果上面列出的点都不相关,我可能会坚持使用查询字符串,因为它更常见。

如果您的意思是构建其他人集成的服务,并且您不希望他们必须将信息传递回他们的应用程序(通过查询字符串),那么使用哈希参数似乎是一个可靠的选项。 / p>

答案 3 :(得分:3)

W3C说here

  

当然,无法确保服务器不能   由于执行GET请求而产生副作用;在   事实上,一些动态资源考虑了一个功能。重要的   区别在于用户没有请求副作用,   所以不能对他们负责。

答案 4 :(得分:3)

使用HASH。

为什么?

因为您开发了第三方插件,并且不知道网站开发人员是否有任何参数不是用户。当您覆盖其中一个使用的get参数时,您可以销毁本机应用程序开发人员传递给服务器的一些重要信息。 此外,您不希望让应用持有者拥有重复的页面,例如:http://somepage.com/http://somepage.com/?app_source=user_id将是重复的,并且许多用户将引用该页面,您将创建其中的许多页面。

哈希是最安全的选择,可以在每个页面上使用。

答案 5 :(得分:2)

哈希是要走的路。

只有2个选择,一个是GET参数,第二个是#。

<强>?获取参数

搜索引擎可以为get参数编制索引,并且两个网址http://www.yoursite.com/http://www.yoursite.com/?app_id=123可以是2个单独的网页

在我的一个网站上,我使用了这个,我收到来自谷歌的电子邮件说明 While crawling your site, we have noticed an increase in the number of transient soft 404 errors around 2012-06-30 22:00 UTC (London, Dublin, Edinburgh). Your site may have experienced outages. These issues may have been resolved. Here are some sample pages that resulted in soft 404 errors:

他们提到的链接工作正常,没有任何问题,但我仍然开始遇到这些错误。

#HASH

哈希更好,因为他们不会改变任何搜索引擎优化的行为(许多人会说它确实有影响,但我不这么认为)

最后,您只需要获取app_source并使用Javascript将其传递到您的服务器。所以你可以随心所欲。如果我是你,我会使用HASH

答案 6 :(得分:1)

你的方法都不好。 最好的方法是使用URL Segments:

如果您想通过App和UserId进行区分:

http://www.mysite.com/appName/UserID/

或仅由UserId:

http://www.mysite.com/UserID/

但我个人会选择AppName和UserName:

http://www.mysite.com/appName/UserName/

答案 7 :(得分:0)

基于今天推出“#”符号的一些现代Web应用程序对于支持像Twitter这样的SPA(单页应用程序)非常有用。请使用“?”登录。

答案 8 :(得分:0)

简单的方法是使用带有userID的GET参数来验证它是否被某人引用。

http://www.mysite.com/?ref=1128721

然后,如果您想了解有关推荐的更多信息,您还可以使用$_SERVER['HTTP_REFERER'](如果您使用php)检查用户实际点击您链接的网址。这样,您就可以确保您的链接不在垃圾场或“自动访问”。