我有一个小网站,如下所示
$_SESSION['somevar']
设置会话变量并重定向到page3 $_SESSION['somevar']
代码:
//here's the code on the top of the page3
<?php
session_start();
if (!isset($_SESSION['somevar']))
{
header("Location:http://somesite")
}
...other code follows
问题是虽然这在FireFox中有效,但即使使用正确的用户凭据,IE 7也会继续重定向回page1而不是显示page3的内容。
有些指针请解决这个问题吗?
编辑:一个非常奇怪的解决方案,但它的工作原理。我改变了 if (!isset($_SESSION['somevar'])) { header("Location:http://somesite") }
到
if ($_SESSION['somevar'] == '' ) { header("Location:http://somesite") }
现在IE很高兴。但我仍然不清楚为什么isset
在IE中不起作用
非常感谢
答案 0 :(得分:0)
调用header函数后,您的脚本需要退出()或die()。
header()不会结束脚本。一些浏览器将继续前进到新位置,而其他浏览器将等待脚本的其余部分运行并显示该输出。除非你调用exit(),否则无论输出是否显示,脚本都会运行。
答案 1 :(得分:0)
的确,你必须在标题之后死去。如果没有,下面的代码将被执行,并且可能导致安全问题,因为并非所有客户端实际都遵循重定向标题(例如,参见搜索引擎蜘蛛)。
您可以检查会话中的实际内容,只是var_dumping其内容。测试期间不会考虑重定向,因为在调用header()之前会将输出发送到浏览器。
<?php
session_start();
/* To test: */
var_dump($_SESSION);
if (!isset($_SESSION['somevar']))
{
header("Location: http://somesite");
die();
}
答案 2 :(得分:0)
使用iehttpheasers或wireshark查看IE是否正在发回cookie。我希望你会发现它不是,或者是它不应该缓存页面。
下进行。
答案 3 :(得分:0)
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
header("Set-Cookie: SIDNAME=ronty; path=/; secure");
header('Cache-Control: no-cache');
header('Pragma: no-cache');
在页面顶部使用它来修复IE7
header('location: land_for_sale.php?phpSESSID='.session_id());
使用?phpSESSID='.session_id()
到您的位置:修复IE6