在php中注销(cookies和会话)
我已经用php编写了登录和注销脚本。我可以登录,但注销不起作用。请有人指出错误。我完全迷路了。这是完整的代码 1.登录php代码:在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
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, '/');
}
}