PHP会话不适用于IE

sea*_*ans 14 php session internet-explorer

我有一个用php制作的网站,它使用整个网站的服务器端会话.
实际上,它是一个具有用户登录的站点,它依赖于会话变量,如果所有会话变量都存在问题,则根本不会加载任何页面.

在网站上,有一个iframe,其中包含来自其他用户的小消息.
这些小消息旁边有可点击的照片,用于打开用户的个人资料.
现在,每个页面都需要一些格式来打开该特定页面上的用户配置文件...实际上只有几个问题页面,但这些页面必须具有稍微不同的onclick功能或者它们会破坏页面.
所以我在每个页面上设置了一个会话变量($_SESSION["current_page"]),让Feed知道如何格式化可点击的照片.现在Firefox,Opera,Chrome,Safari都可以正常工作.
但IE6和IE7在需要特殊格式的页面上遇到问题.
所以在把我的头发拉了一下之后,我终于开始从服务器打印我的会话变量了.
并且,在特殊页面上,($_SESSION["current_page"])始终设置为"main"而不是"special1"或"special2".

我在Firefox和我提到的所有其他浏览器中打印了相同的会话变量,并且它们打印出"special1"或"special2".
谁能想到一些东西 - 可能与饲料在iframe中的事实有关? - 这将导致IE以不同方式处理服务器端会话变量或以某种方式在后台静默启动页面"main"?
我已经非常仔细地检查了feed以查找对"main"页面的任何引用 - 它似乎没有任何方式它正在加载该页面.

这对我没有意义.

Kie*_*eli 31

检查服务器计算机的名称.IE包含" - "或"_"的机器名称存在问题 - 它们无法维护会话!我过去曾经遇到过这个问题两次,而且总是需要几个星期的时间来弄清楚,而且我很震惊,IE还没有解决它.

只需将机器重命名为没有奇怪的字符!如果您只是使用网址中服务器的IP地址进行测试,则可以使其正常工作.

  • 实际上,这是"按预期打破":DNS名称不应包含下划线(根据RFC).所有其他浏览器都容忍它们,但IE以其无限的智慧,只是默默地丢弃这些网站的cookie.没有迹象,没有任何迹象.无价. (16认同)

Sij*_*jin 10

IE在处理iFrame时遇到cookie问题,这可能导致你提到的会话问题,看看这些链接

http://adamyoung.net/IE-Blocking-iFrame-Cookies

http://gathadams.com/2007/06/25/how-to-set-third-party-cookies-with-iframe-facebook-applications/

http://nileshtrivedi.in/blog/2008/09/01/iframe-cookies-and-internet-explorer/

  • "问题"并不是一个正确的总结.IE故意限制跨域IFRAME中的cookie,除非存在P3P策略. (4认同)

Pis*_*3.0 9

尝试使用某种监控代理(我使用Fiddler)测试页面并查看浏览器请求的页面.这可能会为你提供一些线索.

此外,尝试捕获来自不同浏览器的请求/响应,并查看IE正在做什么不同(请求的顺序,请求的内容?).

为了查明问题,您是否可以在使用SESSION的情况下重写代码(在其他答案之一中提到过)?也许IE浏览器的访问顺序与其他浏览器不同?也许它不止一次地请求主页面,这意味着会话var设置为"main"?如果没有会话变量,页面将不会影响彼此的状态.

  • 重写Web应用程序并不总是一种选择.不仅如此,它还没有解决原始问题 - 只是改变它周围的一切.肖恩:你有没有找到原因或解决方案? (2认同)

sea*_*ans 3

我想有些人可能会觉得这个问题的解决方案很有趣。Fiddler 确实在这里提供了帮助。多亏了 Fiddler,我可以看到我实际上正在访问 main.php 页面(因此在目标页面上设置会话变量后立即设置它),但是服务器在根目录上收到 302 后默认在那里网站。这一切都是在我的 onload="" javascript 运行 之前在后台悄然发生的。

所以我确信这些页面上的某些内容导致了错误,但不是灾难性的。

这里是:<img src= "" >

IE 对空白的 src 属性和点击服务器根目录以及默认页面主页面感到非常震惊。我不完全理解这里发生的机制。我也不明白这是否是 IE 应该表现的方式(毕竟它是一个格式错误的 img 标签)。这是一个错误吗?