会话在页面上消失

时间:2012-07-28 14:22:04

标签: php session

我遇到了在我网站的主目录中保持会话活动的问题。

我有一个名为login.php的文件,其中设置了会话。然后,如果我导航到index.php并执行print_R($_SESSION),则会打印出来。然后我去gallery.php它就消失了。反之亦然:如果我首先转到gallery.php,然后在index.php中消失,则会显示。

我认为它可能与php.ini相关。

编辑: 好的,我发现它是一个包含文件,导致了这个,它包含在两个页面上,名为'nav.php'

<?php 
session_start();
$logout = intval($_GET['logout']);
if(isset($logout)){
session_destroy();
//header('Location: '$_SERVER['PHP_SELF']);

}
echo '<a href="/index.php" title ="home" class="navbutton">home</a>

<a href="/gallery.php" title ="gallery"class="navbutton">gallery</a>
 <a href="/info.php"title ="info"class="navbutton">info</a>

<a href="/contact.php"title="contact"class="navbutton">contact</a>';

if(isset($_SESSION['names']) || isset($_SESSION['guestlogin'])){echo '<a href="'.$_SERVER['PHP_SELF'].'?logout=1" title="logout"class="navbutton">logout</a>';
echo'<a href="/gallery" title ="gallery"class="navbutton"> test gallery</a>';

}
else{echo '<a href="/login" title="login"class="navbutton">login</a>';
}
echo'<a href="/blog"title ="blog"class="navbutton">blog</a>

<a href="/prints"title ="prints"class="navbutton">prints</a>';?>

可能是b / c它有session_destroy还是什么?所有包含的文件都应该包含session_start吗?

1 个答案:

答案 0 :(得分:0)

$logout = intval($_GET['logout']);
if(isset($logout)) {
  session_destroy();  
} 
你知道这里有问题吗? $logout总是 某个值。无论价值是什么。因此isset($logout)始终为TRUE。将其更改为:

if(isset($_GET['logout']) && $_GET['logout']) {
  session_destroy();  
} 

如果用户在查询字符串中使用logout=1跟踪网址,则会注销用户。