2016-03-07 61 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

我不是那个为你投反对票的人。我的排名不够高,无法为任何人投票。但是代码不能解决我的问题。你有一个想法,为什么它可能不会删除我的会话变量? –

相关问题