2012-07-28 74 views
1

我在保持会话在我的网站的主目录中处于活动状态时出现问题。会话在页面上消失

我有一个名为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对他们?

+2

如果您发布了gallery.php代码 – 2012-07-28 14:25:32

+0

,我们可以提供帮助。您的代码可能有问题。 – 2012-07-28 14:25:56

+2

我的猜测是那个gallery.php缺少session_start() – MilMike 2012-07-28 14:32:36

回答

0
$logout = intval($_GET['logout']); 
if(isset($logout)) { 
    session_destroy(); 
} 

您在这里看到问题了吗? $logout总是有些价值。不管价值是什么。所以isset($logout)总是TRUE。将其更改为:

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

这将注销用户,如果他在查询字符串URL遵循与logout=1

+0

很感谢。我想如果没有获得变量,我认为这将是错误的。现在我明白了 – user718229 2012-07-28 15:13:03