0

我有一个像下面这样工作的小网站

  1. 用户进入登录页面并输入凭据(称为 page1)
  2. 表单被发布到 page2,它对用户进行身份验证,调用 session_start,然后设置一个会话变量$_SESSION['somevar']并重定向到 page3
  3. 在 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 中工作

非常感谢

4

4 回答 4

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

于 2010-06-02T07:22:02.240 回答
0

确实,您必须在头球后立即死亡。如果没有,下面的代码将被执行并可能导致安全问题,因为并非所有客户端都真正遵循重定向标头(例如,参见搜索引擎蜘蛛)。

您可以检查会话中的实际内容,只需 var_dumping 其内容即可。在测试期间不会考虑重定向,因为在调用 header() 之前将输出发送到浏览器。

<?php
  session_start();

  /* To test: */
  var_dump($_SESSION);

  if (!isset($_SESSION['somevar'])) 
  { 
      header("Location: http://somesite");
      die();
  }
于 2010-01-04T15:45:26.877 回答
0

您的脚本需要在调用标头函数后 exit() 或 die()。

header() 不会结束脚本。一些浏览器会继续前进并移动到新位置,而其他浏览器会等待脚本的其余部分运行并显示该输出。除非您调用 exit(),否则无论输出是否显示,脚本都会运行。

于 2010-01-04T15:22:15.700 回答
0

使用 iehttpheasers 或 wireshark 查明 IE 是否正在发回 cookie。我希望您会发现它不是,或者它正在缓存不应该的页面。

C。

于 2010-01-11T12:10:29.313 回答