通过跨域ajax检索会话

时间:2013-08-08 20:47:27

标签: php jquery codeigniter session cookies

背景:

我正在使用javascript开发网站跟踪器。以下是它的工作原理:

1)用户访问跟踪器脚本位于“anydomain.com”的任何域。该脚本在后台对我的主域“masterdomain.com”进行成功的ajax调用。

2)当“masterdomain.com”收到请求时,将运行以下PSEUDO代码。它通过检查现有会话来工作,如果不存在,则会创建一个新会话。

第一个电话似乎没问题,因为我能够在响应中收到会话ID。但是,每次连续调用“masterdomain.com”都会创建一个新会话。 AKA服务器没有找到“应该”现有的会话。

PSEUDO代码示例:

if(session exists)
{
// update timestamp for session
}
else
{
// set a new session for visitor
}

// load template
api(array("accepted"=>session_id),callback);

一些简要说明:

1)这似乎不是同一个原始问题(因为我能够很好地与服务器通信)。

2)我尝试使用cookies / session似乎都没有工作。

3)我正在使用codeigniter(会话设置为在页面关闭时不会过期)。我也尝试过使用/不使用数据库会话。

如果每次页面在服务器上加载(不使用IP)时有另一种方法来唯一地标识用户,也可以解决此问题。

任何帮助都会非常感激,因为我准备将头发的其余部分从我头上撕下来! :(

2 个答案:

答案 0 :(得分:0)

这个答案是不完整的,你必须做一些额外的研究,但最简单的方法(实际上并不是特别“容易”)是使用Javascript将隐藏的iframe放到masterdomain.com,并设置iframe通信(例如使用postMessage)从该iframe检索会话到您的页面。

答案 1 :(得分:0)

使用AJAX调用时,如果您调用的URL与您的调用脚本位于同一个域中,则只能发送/设置会话cookie。我认为你应该创建一个iframe,从内部调用ajax,它应该工作正常。顺便说一句,我不知道你想跟踪什么。