2010-11-17 65 views
2

我使用Codeigniter 1.7.2和OBsession库来处理会话并将它们存储在数据库中。我正在开发的应用程序由一个充当服务的域(带有CI的域)组成(不知道这是否是正确的术语)。其他网站包括来自该网域的JavaScript文件,并从那里对CI网域进行AJAX调用。如果该网站没有会话ID,则CI域会返回从该呼叫创建的域,然后该站点上的JS会使用该会话ID设置一个cookie。从那时起,如果站点对CI域进行任何调用,它将包含该会话ID以识别自身。PHP为每个页面加载创建新会话

这适用于除Safari和所有Internet Explorer之外的其他所有浏览器(Mac和PC版本)。以Firefox为例,我可以在客户端cookie和数据库中看到初始会话ID get set,我可以根据需要创建多个呼叫,并且可以刷新多个页面,并且cookie和数据库中的会话ID仍然相同。对于Safari,在每一次页面刷新时,我都可以看到新会话被添加到我的会话表中。

关于这里发生了什么的任何想法?

+0

你知道CI的会话库似乎涵盖了OBsession中的所有内容吗?可能值得你使用官方库,可能会解决你的问题。 – fire 2010-11-17 16:16:46

+0

@fire我之前使用过官方库,还是有同样的问题。 – roflwaffle 2010-11-17 16:50:49

回答

0

很明显,会话cookie不会在Safari中“粘住”。由于它是通过Javascript设置的,所以你必须围绕Safari的调试器(无论哪里/哪里)捅一捅,看看有什么在吹。也许安全模型不允许第三方javascript设置cookie,或者浏览器本身不允许第三方cookie。

+0

我一直在玩它一些,站点端的cookie(使用会话ID设置的cookie)似乎正在工作。我可以在第一页加载的cookie中查看会话ID。在此之后的任何页面加载中,会话ID正在从cookie中正确提取,并与AJAX呼叫一起发送(与第一次相同)。问题似乎是,“服务”域在每个AJAX调用中为Safari创建另一个会话。 – roflwaffle 2010-11-17 16:58:09

0

搜索session_start()并粘贴角落找寻此功能的逻辑...

相关问题