由于IE上的框架集,PHP$\会话数据丢失
我想开始说,我已经为这个问题搜索了很多。经过一个多星期的努力,我发现我已经快到了 是的,我确实放了session\u start()-不仅仅是这个,因为我打开了session.auto\u start 有些访问者不使用www访问我的网站,有些则使用www。在整个访问过程中,他们可能会体验到域的变化(从mydomain.com到www.mydomain.com,反之亦然),我会丢失$\u会话数据,并发生许多错误 因此,我将此添加到我的代码中:由于IE上的框架集,PHP$\会话数据丢失,php,internet-explorer,session,session-variables,frameset,Php,Internet Explorer,Session,Session Variables,Frameset,我想开始说,我已经为这个问题搜索了很多。经过一个多星期的努力,我发现我已经快到了 是的,我确实放了session\u start()-不仅仅是这个,因为我打开了session.auto\u start 有些访问者不使用www访问我的网站,有些则使用www。在整个访问过程中,他们可能会体验到域的变化(从mydomain.com到www.mydomain.com,反之亦然),我会丢失$\u会话数据,并发生许多错误 因此,我将此添加到我的代码中: session_write_close(session
session_write_close(session_id());
ini_set('session.cookie_domain', '.mydomain.com');
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();
经过一些测试,我在Chrome和Firefox上得到了完美的效果。更改域时,会话ID和数据保持不变。但是——毫不奇怪——它在IE上不起作用
我没有任何线索,因为从理论上讲,PHP不支持浏览器。因此,无论用户代理是什么,它都不能工作
在IE上,它从一个会话切换到另一个会话。这很奇怪。发生的情况如下:
Directive Local Value Master Value
session.auto_start On On
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 240 240
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0
有些访问者不使用www访问我的网站,有些则使用www。在整个访问过程中,他们可能会体验到域的变化(从mydomain.com到www.mydomain.com,反之亦然),我会丢失$\u会话数据,并发生许多错误
这只是一个建议,我不知道,但可能会有帮助。如果您有权访问.htacces
,您可以在此执行的操作是,在以下帮助下,规范您的网站的URL访问方式,特别是带有或不带www的域部分:
此示例将确保用户始终使用带有www.
子域的网站,而不是混合使用
这通常也是很好的,因此您只有一个域可以为站点节省一些麻烦。为什么<代码>因为IE上的框架集这是一个很好的例子,说明为什么没有人再使用框架了。@Sammitch:不太好。OP所关心的(引自PHP.net),这不会导致会话丢失,而是因为并行请求而阻塞请求。如果不了解更多关于框架集结构的信息,很难说出更多。对于您描述的案例“3”,它看起来像是当您已经在“3”时,
/info2
还没有被调用。这听起来可能有些深奥,但先到先得。了解更多关于您需要的结构和处理的信息可能会有所帮助。@Sammitch我现在无法更改整个前端代码。已经完成了。我没有能力做那件事。我只是想用后端编程来修复它。非常感谢@hakre,但我没有访问.htacess的权限。我只能通过控制面板添加RewriteRule,通过这种方法我不能添加RewriteCond,也不能同时使用last和redirect(选择多个标志)。无论如何,这不会解决我的问题,也许是一个很好的建议。谢谢对于你的问题,我也在下面评论了你的问题。如果不了解更多关于框架集结构和所需处理的信息,就没有什么可说的了。一种解决方案是,框架集由负责正确会话初始化的PHP文件生成。但很难说不知道更多。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]