防止从浏览器到应用商店的不需要的重定向
Preventing unwanted redirects from browser to app store
我一直在开发一个位于广告和应用商店之间的重定向页面。广告以指向重定向页面的静态URL形式存在。重定向页面向第三方发送ajax请求,设置cookie,然后重定向到AppStore。一切都很好,并不罕见。
重定向页面无法自行关闭,因此它仍然是Safari中的一个选项卡。我遇到的问题是,当用户返回Safari时,如果页面已从缓存中清除,Safari将重新加载它,从而触发重定向。我不希望用户被意外地扔进AppStore。
一种解决方案是检查cookie的存在,如果存在则不重定向,但这会导致用户点击另一个横幅广告而无法获得适当的重定向。我曾尝试在URL上添加一个锚点,以防止用户启动刷新,但Safari的自动刷新机制不尊重程序添加的哈希。
如果我可以使用动态源来生成将用户引导到页面的URL,我可以生成时间戳,但现在原始URL是静态的。有人能用客户端代码解决这个问题吗?或者这真的只能使用服务器端解决方案来解决吗?
我最终选择了进行两阶段重定向。用户点击横幅并被引导到:
http://myserver.example.com?someKey=someValue
我有一个功能可以做到这一点:
// Do I have a visited param?
if ($.url(window.location.href).param('visited') === '1') {
// Do I have a visited cookie?
if (helper.retrieveCookie('VISITED') == undefined) {
console.log('Setting visited cookie');
helper.storeCookie('VISITED', '1');
return 1; // Redirect to AppStore.
}
// Have param and cookie
console.log('VISITED cookie set');
console.log('Refreshed');
return 2; // Don't redirect.
} else {
// No param
helper.removeCookie('VISITED');
return 0; // Redirect to self with &visited=1
}
因此,基本上,我们将有意义地通过代码两次,随后由于刷新而通过N次。在第一次传递过程中,我们执行AJAX请求,然后用添加的参数重定向到我们自己。在第二次传递过程中,我们设置了一个cookie并重定向到AppStore。页面的任何后续加载都将同时具有cookie和param,并且不会重定向。新的横幅点击将没有参数,因此它们将正常执行。
这不是最漂亮的解决方案,因为我们必须重新加载重定向页面,但由于其内容应该被缓存,因此命中率应该最低。
在登录页上添加一个javascript怎么样?
if (history.length < 2)
history.back();
else
location.href = '/thankyoufordownloading.htm';
我自己还没有测试过,但它可以工作。
- 我尝试在登录脚本中使用ajax,但页面不会重定向
- 当需要身份验证时,ui路由器不会重定向
- 为什么是FB.注销用户功能不会重定向到我告诉它的 URL
- Backbone router.navigate 不会重定向
- 我的 PHP 网址不会重定向
- 按tab键不会重定向到正确的文本框
- JavaScript 不是重定向
- CakePHP 3 Json 响应而不是重定向(如果 ext = json )
- 护照身份验证回调而不是重定向
- window.location.href 不会重定向到其他域
- 篡改猴脚本不会重定向到预期的 URL
- 服务器立即返回到 ajax 帖子,而不执行重定向代码
- 是否有需要重定向网址的技术限制
- 视频播放后不会重定向
- JavaScript window.location 不会重定向到其他页面
- 通过URL检查和发送变量而不需要重定向
- 需要重定向到谷歌应用程序电子邮件登录页面,而不是在passportjs和nodejs正常gmail登录
- React路由器需要auth而不是重定向
- HTML重定向脚本帮助需要修改以显示重定向url而不是重定向
- 我需要重定向到一个url,当url不允许在框架内