我遇到了在我网站的主目录中保持会话活动的问题。
我有一个名为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吗?
答案 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
跟踪网址,则会注销用户。