我只是不能破坏PHP中的会话

时间:2013-05-26 13:31:04

标签: php

当我通过销毁会话退出并启动另一个会话时,它总是向我显示我开始的第一个会话信息$ _SESSION ['username'];

我的意思是: 我第一次使用此用户名登录时开始了会话 - > AAAAAA 并使用包含以下代码的文件logout.php销毁会话:

session_start();
session_destroy();
header("location: login.php");

并使用其他用户名登录---> BBBBBB 它总是显示我登录的第一个用户名---> AAAAAA

这里的问题在哪里

这是代码(login.php)

<?php
        session_start();
        require_once "config/db.php";
        if(isset($_POST['login'])){     
        $username       = trim(mysql_real_escape_string($_POST['username']));
        $password       = trim(mysql_real_escape_string(md5($_POST['password']))); 
        $query          = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password' ")  or die(mysql_error());
         $rows           = mysql_num_rows($query);

        if($rows == 1){

            while($info = mysql_fetch_object($query)){            
                $dbusername = $info->username;
                $dbpassword = $info->password;
            }

            if($dbusername == $username && $dbpassword == $password){                   
                header("Location: index.php");         
                $_SESSION['username'] = $username;  
            }       

        }else{

        }
    }
?>

index.php:

  <?php session_start();?>
  <h3><?php echo $_SESSION['username']; ?></h3>

3 个答案:

答案 0 :(得分:4)

来自docs

  

为了完全杀死会话,喜欢将用户注销掉,   会话ID也必须取消设置。如果使用cookie来传播   会话ID(默认行为),然后会话cookie必须是   删除。 setcookie()可以用于此。

Example

session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);

答案 1 :(得分:0)

我同意 @Valery Viktorovsky 但是, 自PHP 7以来,您在销毁会话后无法使用session_regenerate_id(true); ...

更改日志HERE说:

7.0.0 - session_regenerate_id() saves old session data before closing.

这个适用于PHP 7或更高版本:

ob_start();
session_start();
session_unset();
session_regenerate_id(true);
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
header('LOCATION: index.php');

所以你可以试试这个,如果你不想

答案 2 :(得分:0)

这是我的例子:

//Delete all previous PHPSESSID cookies
$past = 60 * 60 * 24 * 365 * 10;
setcookie('PHPSESSID', false, time() - $past);
//Delete all the data in the $_SESSION
$_SESSION = array();
//Delete the old session file (true) and create a new session id
session_regenerate_id(true);