【问题标题】:php session id and ajax, javascriptphp会话ID和ajax,javascript
【发布时间】:2010-12-17 06:45:55
【问题描述】:

我注意到我的网站在许多版本的 Internet Explorer 下都无法正常运行。环顾四周后,我做了一个“cookie”测试(http://www.rgagnon.com/jsdetails/js-0092.html),发现当我使用任何版本的 IE 时 cookie 都不起作用,但在 Chrome、Firefox、Safari 上都可以正常工作......

似乎当 cookie 不起作用时,我的会话变量会不断消失。我使用 php 会话。 PHP不应该自动处理这个问题吗?

我确实使用了一些 javascript window.location 和一些 ajax 调用 (phplivex)。会不会是因为这个?无论如何,它不会在所有url的末尾附加phpsessionid吗?

【问题讨论】:

  • 你在每一页都使用 session_start() 吗?
  • 是的,我现在想这是因为php没有将会话ID添加到诸如window.location之类的javascript代码中
  • @nute:PHP 会话管理是基于 cookie 的,所以如果 IE 不记得 cookie,这是正常的,你会一直丢失会话
  • 您是否建议我告诉我的用户,如果他们想使用我们的网站,他们需要接受 cookie,而不是在 URL 中插入会话 ID?
  • 是的。将会话 ID 放在 URL 中存在潜在的安全风险:phpsec.org/projects/guide/4.html

标签: php javascript ajax session


【解决方案1】:

可能是时区问题?见Session cookies rejected by Internet Explorer

最终解决方案

时区问题确实给了我一个提示 检查我的客户的时间和 服务器。我的客户是一台 Windows 笔记本电脑 哪个有正确的时间和 时区由于被同步 使用 NTP 协议。我的服务器在 另一只手不同步。

时区正确,但 UTC 时间改为我的当地时间。 结果,服务器实际上是 六小时前 客户很担心。一个超时 小时过去了 对于运行在我的 IE 实例 客户。难怪 IE 拒绝了我的 会议。

我运行 ntpdate 来修复我的时间,然后 使用 tzselect 重置我的时区。

# ntpdate pool.ntp.org
# tzselect

然后我立即刷新了 IE 开始接受会议。全部 我的应用程序的各个方面开始 正常工作。这么多 小。

故事的寓意,使用 NTP 来确保 你的机器有时间设置 正确。

所以基本上要确保你的服务器上的 UTC 时间是正确的,并明确设置 PHP 时区(如果你不这样做,你会在 E_STRICT 下收到警告)。

【讨论】:

  • 不。我刚刚将 IE 设置为“接受所有 cookie”,它现在可以工作了。所以我现在确信我的应用程序无法处理禁用 cookie 的访问。
【解决方案2】:

您确定这与您的特定 IE 安装无关。你试过不同的机器吗?

作为一个整体解决方法,您可以使用use_trans_sid,它会使session id 通过 URL 而不是 cookie 传递。 警告 use_trans_sid 可能会造成严重的安全问题,所以我认为您最好调查问题的来源,如果您真的找不到任何解决方案,请使用它。

【讨论】:

  • 是的,经过多次测试,我确信这只是取决于是否启用了 cookie。你会建议我告诉我的用户如果他们想使用我们的网站,他们需要接受 cookie,而不是在 URL 中插入会话 ID?
  • 是的,我会推荐更多的用户警告然后use_trans_siduse_trans_sid 是一种建立手机网站的黑客。另外,由于J2EEASP.NETPHP(我都忘记了)中的所有会话处理都是基于 cookie,我认为不接受 cookie 的用户不仅会在您的网站上遇到问题,而且在几乎任何网站上都会遇到问题!
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2011-08-03
  • 1970-01-01
  • 2013-04-03
相关资源
最近更新 更多