代码之家  ›  专栏  ›  技术社区  ›  Anand Shah

使用会话变量时IE中的PHP重定向

  •  0
  • Anand Shah  · 技术社区  · 16 年前

    我有一个小网站,工作如下

    1. 表单被发布到page2,page2对用户进行身份验证,调用session_start,然后使用 $_SESSION['somevar'] 并重定向到第3页
    2. 在第3页,我检查 $会话['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中有效,但即使有正确的用户凭证,ie7仍然会重定向回page1,而不是显示page3的内容。

    请给我一些指针来解决这个问题?

     if (!isset($_SESSION['somevar'])) { header("Location:http://somesite") }
    

     if ($_SESSION['somevar'] == '' ) { header("Location:http://somesite") }
    

    我现在很高兴。但我还是不知道为什么 isset 不在IE工作

    非常感谢

    4 回复  |  直到 12 年前
        1
  •  0
  •   Scott Saunders    16 年前

    脚本需要在调用header函数后退出()或die()。

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

        2
  •  0
  •   Benoît Vidis    16 年前

    事实上,你必须在头球后死去。否则,将执行下面的代码,并可能导致服务器安全性问题,因为并非所有客户端都遵循重定向头(例如搜索引擎蜘蛛)。

    你可以检查session中的实际内容只是var_ng转储它的内容。在测试期间将不考虑重定向,因为在调用header()之前将输出发送到浏览器。

    <?php
      session_start();
    
      /* To test: */
      var_dump($_SESSION);
    
      if (!isset($_SESSION['somevar'])) 
      { 
          header("Location: http://somesite");
          die();
      }
    
        3
  •  0
  •   symcbean    16 年前

    使用iehttpheasers或wireshark来确定IE是否正在发回cookie。我希望您会发现,要么它不是,要么它正在缓存不应该缓存的页面。

    C。

        4
  •  0
  •   sra Jon    14 年前
    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

    推荐文章