Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中注销(cookies和会话)_Php_Session_Cookies - Fatal编程技术网

在php中注销(cookies和会话)

在php中注销(cookies和会话),php,session,cookies,Php,Session,Cookies,我已经用php编写了登录和注销脚本。我可以登录,但注销不起作用。请有人指出错误。我完全迷路了。这是完整的代码 1.登录php代码: <?php session_start(); require_once('login/connectvars.php'); $msg = ""; if(!isset($_SESSION['username']) && isset($_COOKIE['username'])) { $_SESSION['username'] =

我已经用php编写了登录和注销脚本。我可以登录,但注销不起作用。请有人指出错误。我完全迷路了。这是完整的代码

1.登录php代码:

    <?php
session_start();
require_once('login/connectvars.php');
$msg = "";

if(!isset($_SESSION['username']) && isset($_COOKIE['username']))
{
    $_SESSION['username'] = $_COOKIE['username'];
}

if(isset($_POST['submit']))
{
    $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
    $username = mysqli_real_escape_string($dbc,trim($_POST['username']));
    $password = mysqli_real_escape_string($dbc,trim($_POST['password']));

    if(!empty($username) && !empty($password))
    {
        $query = "SELECT username FROM users_dns WHERE username = '$username' AND password = SHA('$password')";
        $data = mysqli_query($dbc,$query) or die(mysqli_error($dbc));

        if(mysqli_num_rows($data) == 1)
        {
            $row = mysqli_fetch_array($data);
            $_SESSION['username'] = $row['username'];
            setcookie('username',$row['username'],time()+(60*6));
            $msg = 'success';
        }
        else
        {
            $msg = 'enter correct values..';
        }
    }
    else
    {
        $msg = 'Enter all fields..';
    }
}

?>

2.我在HTML中用于检查会话的代码

   <div id="login_form">
          <h2>
            <?php echo $msg; ?>
          </h2>
       <?php
       if(isset($_SESSION['username']))
        {
            echo 'nothing<br />';
            echo '<a href="login/logout.php">log out'.$_SESSION['username'].'</a><br />';
        }
        else
        {
       ?>
         <form id="login"  method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <table>
                  <tr>
                     <th>Username:</th>
                     <th>Password:</th>
                  </tr>
                  <tr>
                     <td><input type="text" name="username" /></td>
                     <td><input type="password" name="password" /></td>
                   </tr>
                   <tr>
                      <td><input type="submit" name="submit" value="Log In" class="submit" /></td>
                      <td><a href="login/signup.php"><input type="button" class="submit" value="Sign Up" /></a></td>
                   </tr>
            </table>
         </form>
         <?php
         }
         ?>
    <!-- login form -->

   </div>

要注销,请使用:

session_destroy();
header('Location: index.php'); // file name where you want to redirect after logout
exit();

要删除所有cookie,请尝试

<?php

if (isset($_SERVER['HTTP_COOKIE']))
{
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie)
    {
        $mainCookies = explode('=', $cookie);
        $name = trim($mainCookies[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

为什么要这样做<代码>$\u会话=数组()?您应该只使用
setcookie('username','',time()-1)我使用它是为了销毁所有会话变量..不要这样做。。。只需使用
session\u destroy()
,对于cookies,您应该使用
print\r($\u COOKIE)
查看谁还剩下,以及删除了哪些内容
$\u session=array()但它仍然没有注销。而
print\r($\u COOKIE)
显示了很多我无法理解的信息,只需在这里发布即可,除非你在cookies中存储了一些密码,但也有一个创建的COOKIE需要销毁..它通过设置的COOKIE循环,然后一个接一个地设置这些COOKIE的时间..这就是诀窍…干杯..要删除COOKIE,你只需再次设置COOKIE,但有过期的时间答案是这样写的…很高兴听到你不想要答案,但也想学它…很好…+1+1+1+1+1为你…非常感谢。这是令人鼓舞的。还有一件事。有没有可能把这段代码缩短一点…因为我还不太擅长php…所以少一点代码会让我感觉更好。。!!需要花时间来缩短此代码,但这是目前最好的方式…不久将更新更多的替代方案。。。
<?php

if (isset($_SERVER['HTTP_COOKIE']))
{
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie)
    {
        $mainCookies = explode('=', $cookie);
        $name = trim($mainCookies[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}