2016-03-07 57 views
-1

我先被創建$_SESSION['username']變量文件:

<?php 

$kullaniciadi = $_POST['kullaniciadi']; 
$sifre = $_POST['sifre']; 

if ((!$kullaniciadi =="") and (!$sifre =="")) { 
include("db.php"); 

$sql = $sqlt->query("select * from uye where kullaniciadi='$kullaniciadi' and sifre='".md5($sifre)."'"); 
$kayitsayisi = mysqli_num_rows($sql); 

if ($kayitsayisi == "0") { 
header ("Location: login.php?hata=yes"); 

} 

else { 

$kontrol_ok = $sql -> fetch_assoc(); 
$k=$kontrol_ok["kullaniciadi"]; 

session_start(); 

$_SESSION['username']= $k; 

header ("Location: homepage.php"); 
} 
} 
else { 
header ("Location: login.php?hata=yes"); 
} 
?> 

它被稱爲login_do.php(我從login.php形式發送MySQL的數據在這裏,做此文件中的用戶名和密碼校驗)。

比所有其他PHP文件我也有,我首先:

<?php 

session_start(); 

if (isset($_SESSION["username"])) { 
echo 'loginok'; 
} else { 
header ("Location: login.php"); 
} 

?> 

比我有一個logout.php,用戶會被重定向到,如果他按下一個按鈕。 logout.php文件包含此:

<?php 

session_start(); 

if(isset($_SESSION['username'])) { 
    unset($_SESSION['username']); 
} 

session_destroy(); 

header("Location: login.php") 

?> 

但它根本不起作用。我的意思是,如果我自己瀏覽我的瀏覽器cookies並刪除SESSION cookie,那麼整個系統都會正常工作,除非我登錄,否則我無法訪問除login.php以外的任何其他php文件。但我需要此操作才能使用註銷。而不是我手動從瀏覽器中刪除會話。

+0

我認爲'session_destroy()'部分將阻止'unset'部分來自工作,因爲PHP序列化的請求結束到那個時候它一直會話銷燬。在這種情況下,當你再次啓動它時,它將加載之前包含'$ _SESSION ['username']' – apokryfos

+0

的會話數據。同樣嘗試使用沒有session_destroy()的代碼,它不起作用。它讓我瘋狂。我在這裏犯了什麼錯誤。 –

+1

值得一提的是,無論成功與否,您的「login_do.php」將始終設置$ _SESSION ['用戶名']。 – apokryfos

回答

-1

session_unset();

session_destroy()銷燬所有與當前會話相關的數據。它不會取消設置與會話關聯的任何全局變量,也不會取消設置會話Cookie。要再次使用會話變量,必須調用session_start()。

爲了完全消滅會話,就像登錄用戶一樣,會話ID也必須取消設置。如果使用cookie傳播會話標識(默認行爲),則必須刪除會話cookie。 setcookie()可用於此目的。

- http://php.net/manual/en/function.session-destroy.php

+0

嗨,我試過了:確切的代碼示例,他們給了你給我的網址。我甚至不想更改任何變量,因爲代碼是銷燬所有會話數據。但它仍然不起作用。 –

+0

現在爲我工作,就像session_unset()一樣。我不知道什麼是消極的。我測試了代碼併發布了它。 –

+0

我不是那個爲你投反對票的人。我的排名不夠高,無法爲任何人投票。但是代碼不能解決我的問題。你有一個想法,爲什麼它可能不會刪除我的會話變量? –

相關問題