facebook 客户端(应用程序)和 cookie(每个 url 创建的新 cookie,而不是每个域一个)
Posted
技术标签:
【中文标题】facebook 客户端(应用程序)和 cookie(每个 url 创建的新 cookie,而不是每个域一个)【英文标题】:facebook client (app) and cookies (new cookie created per url instead of one per domain) 【发布时间】:2015-03-23 23:02:54 【问题描述】:我有一个网站,如果设置了 cookie,它不应该显示广告,cookie 有效期为 24 小时。在浏览器、移动浏览器等上一切正常,但如果用户从 ios 上的 Facebook 应用程序(客户端)打开我网站的 url(还不能在 android 上探测它),cookie 可以工作,但每个 url 都会生成,因此广告会在每个页面首次加载时展示。应该仅在 24 小时内每次首次加载网站时进行。
同样,这只发生在 Facebook 移动应用程序上(据我所知是 iOS)。这是我生成 cookie 的代码。
// Cookie functions
function getCookie(cname)
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
function setCookie(cname, cvalue, exdays)
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/; domain=.site.com;";
function checkCookie(cname)
var cookie=getCookie(cname);
if (cookie)
return true;
else
return false;
那么导致这种行为的原因是什么?
【问题讨论】:
【参考方案1】:页面是通过 Facebook App 在应用内浏览器中加载的,还是直接在 Safari/Chrome 中加载的?在点击链接时,或者在(应用内)浏览器第一次打开后的每个“第一次”请求时,您是否有这种行为?
对我来说,以下适用于 iOS Facebook 应用的应用内浏览器。第一次没有cookie。当我关闭浏览器并再次从时间线/newfeeds 中单击链接时,应用内浏览器第二次打开时,找到了 cookie。
<html>
<head>Test Cookies</head>
<script type="text/javascript">
function getCookie(cname)
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
function setCookie(cname, cvalue, exdays)
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/;";
function checkCookie(cname)
var cookie=getCookie(cname);
if (cookie)
return 'yes, cookie! ' + cookie;
else
return 'no cookie';
</script>
<body>
<script type="text/javascript">document.write(checkCookie('test')); setCookie('test', 'value', 1); </script>
</body>
</html>
【讨论】:
以上是关于facebook 客户端(应用程序)和 cookie(每个 url 创建的新 cookie,而不是每个域一个)的主要内容,如果未能解决你的问题,请参考以下文章
在用户注销时从我的应用程序中删除 facebook 会话 cookie
当我们通过 facebook 登录时如何删除 facebook cookie
Facebook 如何在画布页面上为 iFrame 设置跨域 cookie?
通过facebook登录后设置spring security记住我的cookie
如何使用 Shiro 验证基于 cookie 或 facebook 的用户?
带有 Facebook 访问令牌的 MVC 5 Web API 到 RegisterExternal,无需 Cookie