使用 cookie 时注销
Posted
技术标签:
【中文标题】使用 cookie 时注销【英文标题】:Logout when using cookies 【发布时间】:2014-09-29 17:17:18 【问题描述】:我是使用 php cookie 的初学者,我正在尝试使用 cookie 制作一个简单的登录和注销表单。一切都很好,但是当我按下注销链接时,我无法注销。要注销,我必须从浏览器中删除 cookie。
登录页面
<?php
session_start();
if (isset($_COOKIE["Email"]))
header("location: home.php");
?>
<form method="post" action="log_in.php">
<font size="6">Sign In</font>
Email Address: </b></font><input type="text" name="Email" id="email" />
password: <input type="password" name="password" id="password" />
<input type="checkbox" name="rememberMe" value="1" id="check"/> Remember Me
<input type="submit" name="Login" id="sign" value="sign in" >
<?php
include 'db.php';
if(isset($_POST['Login']))
$user_email = $_POST['Email'];
$password = $_POST['password'];
$check_user = "SELECT * FROM user where user_email = '$user_email' AND user_pass = '$password'";
$run = mysql_query($check_user );
if (mysql_num_rows($run) > 0)
$_SESSION['Email']= $user_email;
$_SESSION['start'] = time();
if(isset($_POST['rememberMe']))
$expire=time()+120;
setcookie("Email", "Email", $expire);
else
$expire=time()+30;
setcookie("Email", "Email", $expire);
echo "<script>window.open('home.php','_self')</script>";
else
echo "<script>alert('email or password incorrect!')</script>";
?>
主页
<?php
if (isset($_COOKIE["Email"]))
echo "Welcome " . $_COOKIE["Email"] . "!<br>";
echo '<a href="logoutForm.php">logout</a>';
else
$now = time(); // Checking the time now when home page starts.
if ($now > $expire)
session_destroy();
header("location: log_in.php");
退出页面
<?php
session_start();
unset($_SESSION['Email']);
session_destroy();
header("Location: log_in.php");
if(isset($_SESSION['Email'])):
setcookie($_SESSION['Email'],'',time()-7000000,'/');
endif;
?>
【问题讨论】:
您似乎只是在取消设置您的电子邮件会话变量。您还使用了$_SESSION['start']
,所以它仍然处于设置状态。您可以尝试unset($_SESSION);
取消设置所有会话变量。
您的主页没有session_start();
,至少在您发布的内容中没有;这是必需的。
【参考方案1】:
如果你想彻底销毁会话,你可以使用 session_destroy()
<?php
session_start();
session_destroy();
?>
或者,如果您只是想取消设置电子邮件,您可以使用
<?php
session_start();
if(isset($_SESSION['Email']))
unset($_SESSION['Email']);
?>
【讨论】:
session_start();
在使用session_destroy();
时需要包含【参考方案2】:
您的主页(代码)没有session_start();
,至少在您发布的内容中没有;使用session_destroy()
时需要;它不能单独工作。
试一试:
旁注: $expire
未定义 home page
代码,因此您需要使用与其他页面相同或相似的方法。
<?php
if (isset($_COOKIE["Email"]))
echo "Welcome " . $_COOKIE["Email"] . "!<br>";
echo '<a href="logoutForm.php">logout</a>';
else
$now = time(); // Checking the time now when home page starts.
if ($now > $expire) // $expire is undefined
session_start(); // <= required
session_destroy(); // <= does not work on its own
header("location: log_in.php");
【讨论】:
我尝试添加 session_start();在主页但它不起作用,我认为是注销页面的问题。 注销页面中的unset($_SESSION['Email']);
;你试过unset($_SESSION);
吗? @user3891365 将取消设置所有会话。
@user3891365 另外,在您的注销页面中尝试使用setcookie($_SESSION['Email'],'',time()-7000000,'/');
而不是setcookie($_COOKIE['Email'],'',time()-7000000,'/');
。
@user3891365 我发现的另一件事;在您的主页中$expire
未定义,这是一个促成因素。在您打开 <?php
标记 error_reporting(E_ALL); ini_set('display_errors', 1);
之后将错误报告添加到该文件或所有文件的顶部,您将看到错误声明为未定义。
@Darren 看起来他们最后很甜蜜!以上是关于使用 cookie 时注销的主要内容,如果未能解决你的问题,请参考以下文章