3 回答

TA貢獻1876條經驗 獲得超6個贊
您已設置$_SERVER['PHP_SELF']. 這就是它重定向到同一頁面的原因。你需要改變它,例如:login.php
if(isset($_GET['logout'])) {
unset($_SESSION['username']);// do not set it as empty, unset it
//header('Location: ' . $_SERVER['PHP_SELF']);//change this line to
header('Location: login.php');
}
另一個錯誤是在您將它重定向到的 else 條件中,index.php這就是未登錄用戶能夠看到索引頁面的原因。
else {
//header("Location: index.php");// change this to
header('Location: login.php');
}
注意:我只添加login.php了例如。將未登錄的用戶重定向到您想要的位置。

TA貢獻1840條經驗 獲得超5個贊
首先,注銷時銷毀會話。并將其重定向到登錄頁面。假設 index.php 是登錄頁面。
if(isset($_GET['logout'])) {
session_start();
session_destroy();
header('Location: index.php');
}
在 sidebar.php 中,檢查會話是否設置。如果未設置會話,則表示用戶未登錄。您可以通過將他們重定向到登錄頁面來阻止他們訪問該頁面
<?php
session_start();
if (!isset($_SESSION["username"]))
{
header("location: index.php");
} ?>
<ul>
<li class="dropdown profile_details_drop">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<div class="profile_img">
<div class="user-name">
<p>
<a href="?logout=1">Logout</p>
</div>
<div class="clearfix"></div>
</div>
</a>
</li>
</ul>

TA貢獻1815條經驗 獲得超13個贊
首先,你的代碼應該被我美化。
其次,您忘記關閉a href標簽,因此您的$_GET陳述 isset 不是真的。因此,通過單擊該鏈接,該頁面將再次檢查if(isset($_POST['username']))哪個是真的,并且您將被重定向到您的標題的原因。
考慮制定的logout.php,你使用session_destroy和session_unset你重定向你的用戶login.php,例如:
登出.php:
<?php
session_start();
session_unset($_SESSION['username']);
session_unset();
session_destroy();
header('Location: login.php');
?>
最后,考慮不使用$_GET,而偏愛$_POST或$_SESSION變量,只是因為在 URL 上不可見的原因。
- 3 回答
- 0 關注
- 147 瀏覽
添加回答
舉報