我正在浏览关于canvas应用程序的Facebook文档,我遇到了一个示例应用程序:http://developers.facebook.com/docs/samples/canvas.然而,当我阅读他们的例子时,我对他们在iframe应用程序中使用cookie感到非常困惑.
一个小背景...
我已经玩过使用iframes嵌入式小部件(与Facebook无关),我发现一些浏览器(Chrome,Safari等)有严格的cookie策略,不允许在iframe中设置跨域cookie(Firefox,另一方面,允许iframe在iframe中设置跨域cookie).例如,如果foo.com具有src="http://bar.com/widget"iframe小部件的iframe将无法为bar.com设置任何cookie,因此将无法在iframe中保持状态:bar.com将解释来自的每个请求(包括ajax请求)窗口小部件作为没有建立会话的新请求.我挣扎了,通过使用JSONP和javascript为foo.com设置cookie来找到解决方法......
... 所以?
好吧,我正在查看示例画布iframe Facebook应用程序,我注意到他们的应用程序(托管在runwithfriends.appspot.com上)能够设置一个cookie u,其中包含当前用户的id以及runwithfriends的一些其他参数. appspot.com域名.它会在每个请求中发送此cookie ...它可以在Chrome和Firefox中运行!WTF?Facebook如何解决Chrome上的跨域cookie限制?
(我现在已经知道了答案,但我认为这可能对那些努力弄清楚同样事情的人有所帮助 - 我将在下面发布答案.)
在我们的网站上,我们希望能够在多个域中共享会话.所有这些网站都在同一台服务器上,但其中一些网站有不同的IP地址.
我找到的可能解决方案是自己设置会话ID:
<?php
session_id($someUniqueHash);
?>
Run Code Online (Sandbox Code Playgroud)
如果我像md5('test')那样制作哈希,这就有效.在同一服务器上的另一个域上,我们再次进行会话.
问题是生成ID.我在互联网上看到一些使用microtime等的解决方案,但是当我使用这种方法时,我无法预测其他域/ PHP页面上的会话ID.
有没有人有想法?或者我们不应该实现这个?是否有其他选项可以在多个域上共享会话?(不是子域名!)
我正在使用cookie.js库从本地HTML文件设置cookie
$.cookies.set("Demo","Dummy Data");
Run Code Online (Sandbox Code Playgroud)
从另一个域我试图使用下面的代码获取cookie值
alert($.cookies.get("Demo"));
Run Code Online (Sandbox Code Playgroud)
但它让我无效.
请帮帮我
我正在创建一个登录系统,在该系统中我使用个人电子邮件地址作为我数据库中的唯一标识符。人们可以使用任何 openid 提供程序登录,例如 google ect(也可以是 facebook),它只会将电子邮件作为唯一标识符存储在我的 sql 数据库的用户表中。(意味着我不必担心电子邮件验证、密码等问题,用户不必注册)。
这是有效的,通过使用链接/javascript 打开一个新窗口,然后我的 php 脚本被定向到 google 或任何提供者。然后他们输入详细信息,然后 google/ect 会自动将窗口连同(如果有效)用户详细信息(最重要的是电子邮件)重定向回我的登录脚本。
现在我查看电子邮件的响应,看看它是否在我的数据库中,如果没有添加它,如果是,使用 $_SESSION,将用户登录到我的站点。
我使用 openid 机制(谷歌、雅虎等)完美地完成了这项工作。我也试图让它与 facebook 一起工作,但遇到了很大的困难。它能够将用户登录到 fb,获取用户电子邮件等。但是,一旦我尝试将用户登录到我的网站,它就不起作用。出于某种原因,它为我打开的新窗口(并且我的脚本 + 重定向运行)有一个单独的会话(包括单独的 sessionid),然后到我网站的其余部分?
只是想知道是否有人知道为什么会发生这种情况。
这是登录脚本的样子(在新窗口中运行):
<?php
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";
session_start();
$code = $_REQUEST["code"];
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=email&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" …Run Code Online (Sandbox Code Playgroud) 是否可以在C#中读取跨域cookie?如果可能的话我怎样才能读取cookie,在一个域中设置的cookie如"dev-001"并在另一个域中获取cookie"localhost"
我用了
Request.Cookies["userInfo"].Values
Run Code Online (Sandbox Code Playgroud)
它显示一个空值.
有没有可能.因为这是我们的要求.所有信息都以cookie形式提供.但我看不懂