【问题标题】:PHP creating a new session for every page loadPHP为每个页面加载创建一个新会话
【发布时间】:2010-11-17 15:19:22
【问题描述】:

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

这适用于除 Safari 和所有 Internet Explorer 之外的所有其他浏览器(Mac 和 PC 版本)。例如,在 Firefox 中,我可以看到在客户端 cookie 和数据库中设置了初始会话 id,我可以进行尽可能多的调用和尽可能多的页面刷新,它在 cookie 和数据库中仍然具有相同的会话 id .对于 Safari,在每次页面刷新时,我都可以看到新会话被添加到我的会话表中。

对这里发生的事情有什么想法吗?

【问题讨论】:

  • 您知道 CI 的会话库似乎涵盖了 OBsession 中的所有内容吧?可能值得您使用官方库,可能会解决您的问题。
  • @fire 我之前用的是官方库,还是一样的问题。

标签: php session codeigniter cookies


【解决方案1】:

Safari 和 Internet Explorer(中等安全级别)默认不接受 3rd 方 cookie。谷歌搜索带来:

http://squeeville.com/2010/02/03/third-party-cookies-in-safari-internet-explorer/

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    显然会话 cookie 没有“粘”在 Safari 中。由于它是由 Javascript 设置的,因此您必须在 Safari 的调试器(无论它在哪里/在哪里)四处寻找,看看发生了什么。也许安全模型不允许 3rd-party javascript 设置 cookie,或者浏览器本身不允许 3rd-party cookie,句号。

    【讨论】:

    • 我一直在玩它,站点端的 cookie(设置会话 id 的 cookie)似乎正在工作。我可以在第一页加载时查看 cookie 中的会话 ID。在此之后的任何页面加载中,会话 id 都会正确地从 cookie 中提取并与 AJAX 调用一起发送(与第一次相同)。问题似乎是“服务”域在每次 AJAX 调用时为 Safari 创建另一个会话。
    【解决方案3】:

    搜索session_start()并粘贴此函数周围的逻辑...

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多