用户未登录时的PHP无限循环

用户未登录时的PHP无限循环,php,session,loops,header,infinite,Php,Session,Loops,Header,Infinite,我对这段代码有一个无限循环的问题。它检查是否有会话变量,如果没有,我希望它们被重定向到索引页 session_start(); if (! isset($_SESSION['foo'])) { header('Location: /index.php'); } exit; 我试着把出口打开;和退出();和endif;在if循环的外部和内部,所有这些都给了我无限循环的问题。该代码位于标题页中,然后在每个页面上调用该标题页,因此只有在未登录的情况下才能访问索引页。这就是为什么

我对这段代码有一个无限循环的问题。它检查是否有会话变量,如果没有,我希望它们被重定向到索引页

session_start();
   if (! isset($_SESSION['foo'])) {
     header('Location: /index.php');
   }
exit;
我试着把出口打开;和退出();和endif;在if循环的外部和内部,所有这些都给了我无限循环的问题。该代码位于标题页中,然后在每个页面上调用该标题页,因此只有在未登录的情况下才能访问索引页。这就是为什么我希望这个代码首先存在的要点


提前感谢您的帮助。

如果您在索引页上进行了检查,则在未设置会话时,它将重定向循环。您需要确保没有对index.php进行此检查,并在if语句中添加排除index.php页面的内容。差不多

if(! isset($_SESSION['foo']) && strpos($_SERVER['REQUEST_URI'], 'index.php') === false) {
    header('Location: /index.php');
}

我想你只是错过了一节课

page.php:

<?php
session_start(); // this is important
if (! isset($_SESSION['foo'])) {
    header('Location: /index.php');
    exit;
}
?>

index.php:

<?php
session_start(); // this is important

//stuff

$_SESSION['foo'] = 'stuff';

//other stuff
?>


您提到此代码位于每页的标题页上。如果此代码也位于索引页上,那么索引页也将检查会话变量,从而导致无限循环,我不会像那样测试请求\u uri。。。只需执行
http://example.com/realpage.php?haha_Im_in_ur_sitez=index.php
非常感谢。我明白你想说什么。我会按照你的答案去做,并相应地修改我的代码。虽然Marc说不要像这样使用请求uri,但我会看看这是否有效。我只是忘了在代码中包含它。我很抱歉。我把它放在if声明之前,就像你一样。非常感谢你!你太棒了:基本上你上面的答案就是这么说的。因此,如果您来自索引,则不应执行重定向。非常感谢。