我的logout.php
有一个问题。问题是第二次注销。例如,用户在我的网站上有两个帐户。用户使用第一个帐户进入,然后他点击loged out就可以了。但是当他使用第二个帐户登录时,他点击了logout.php
无效。你能帮帮我吗...
这是我的session.php
<?php
$session_uid=$_SESSION['uid'];
// Session Private
if(!empty($session_uid))
{
$uid=$session_uid;
$login='1';
}
else if($_GET['username'] || $_GET['msgID'])
{
$uid=$Wall->User_ID($username);
$login='0';
}
else
{
$url=$base_url.'index.php';
header("location:$url");
}
?>
这是Login.php
代码:
<?php
ob_start("");
error_reporting(0);
include_once 'includes/db.php';
include_once 'includes/User.php';
session_start();
$session_uid=$_SESSION['uid'];
if(!empty($session_uid))
{
header("location:main.php");
}
$User = new User();
//Login
$login_error='';
if($_POST['user'] && $_POST['passcode'] )
{
$username=$_POST['user'];
$password=$_POST['passcode'];
if (strlen($username)>0 && strlen($password)>0)
{
$login=$User->User_Login($username,$password);
if($login)
{
$_SESSION['uid']=$login;
header("Location:main.php");
}
else
{
$login_error="<span class='error'>Wrong password or username!</span>";
}
}
}
//Registration
$reg_error='';
if($_POST['email'] && $_POST['username'] && $_POST['password'] )
{
$email=$_POST['email'];
$username=$_POST['username'];
$password=$_POST['password'];
if (strlen($username)>0 && strlen($password)>0 && strlen($email) )
{
$reg=$User->User_Registration($username,$password,$email);
if($reg)
{
$_SESSION['uid']=$reg;
header("Location:main.php");
}
else
{
$reg_error="<span class='registererror'>Username or Email is already exists.</span>";
}
}
}
?>
logout.php
代码:
<?php
error_reporting(0);
session_start();
$_SESSION['uid']='';
if(session_destroy())
{
$url=$base_url.'index.php';
//header("Location: $url");
echo "<script>window.location='$url'</script>";
}
?>
答案 0 :(得分:1)
由于您决定执行echo "<script>window.location='$url'</script>";
而不是header("Location: $url");
,因此您的logout.php正在浏览器中缓存。所以在第二次点击时,它甚至没有点击服务器。
您应该在服务器端进行重定向,而不是在Javascript中进行。如果(1)你没有打印任何东西,(2)你只返回位置标题,(3)你做重定向而不管session_destroy()是返回true还是false,那么浏览器不应该缓存这个页面,你不应该有这个问题。
当然,重定向到的页面也可以被缓存,因此在应该受登录保护的页面上设置no-cache标头,以便在用户注销时浏览器不会显示缓存版本。