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

使用会话变量时IE中的PHP重定向,php,redirect,session-variables,Php,Redirect,Session Variables,我有一个像下面这样的小网站 用户进入登录页面并输入凭证,称之为第1页 表单被发布到第2页,该页对用户进行身份验证,调用session\u start,然后使用$\u session['somevar']设置会话变量,并重定向到第3页 在第3页,如果未将用户发送回登录页面,我将检查是否设置了$u会话['somevar'] 代码: 到 我现在很高兴。但我仍然不明白为什么isset没有在IE工作 非常感谢您的脚本需要在调用header函数后退出或终止 标头不会结束脚本。一些浏览器将继续并移动到新位置,

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

用户进入登录页面并输入凭证,称之为第1页 表单被发布到第2页,该页对用户进行身份验证,调用session\u start,然后使用$\u session['somevar']设置会话变量,并重定向到第3页 在第3页,如果未将用户发送回登录页面,我将检查是否设置了$u会话['somevar'] 代码:

我现在很高兴。但我仍然不明白为什么isset没有在IE工作


非常感谢

您的脚本需要在调用header函数后退出或终止


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

事实上,您必须在标题之后立即退出。如果没有,下面的代码将被执行,并可能导致安全问题,因为并非所有客户端都会遵循重定向头(例如搜索引擎爬行器)

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

<?php
  session_start();

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

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

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

C

在页面顶部使用此选项修复IE7

header('location: land_for_sale.php?phpSESSID='.session_id());

使用?phpSESSID='。会话id到您的位置:修复IE6

我尝试在标头调用后使用die和exit,但它仅在Frefox中有效,即根本不起作用。我还尝试使用var\u dump转储$\u会话。FF显示数据数组1{[somevar]=>string9 somevalue}但IE显示数组0{}使用var_dump FF显示数据数组1{[somevar]=>string9 somevalue}但IE显示数组0{}这意味着您没有任何会话运行IE。最可能的情况是IE安全设置中禁用了cookie。检查HTTP流量,会话cookie一定有问题。一个伟大的工具是小提琴手。
 if ($_SESSION['somevar'] == '' ) { header("Location:http://somesite") }
<?php
  session_start();

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

  if (!isset($_SESSION['somevar'])) 
  { 
      header("Location: http://somesite");
      die();
  }
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');
header('location: land_for_sale.php?phpSESSID='.session_id());