繁体   English   中英

PHP-管理会话-不注销

[英]PHP - Managing Session - Doesnt Logout

我创建了具有必要数据库表和php的用户身份验证系统。

在我登录之前的第一次(在创建任何会话之前),每个页面上的重定向都可以正常工作(即,如果未登录,则重定向到登录页面)。

但是,一旦我用用户登录然后注销,就不会起作用。 我认为未结束会议可能是一个问题(对不起,如果错了)

这是每个页面中的一些代码

登录PHP

    <?php
session_start();
$message="";
if(count($_POST)>0) 
{
    include('config.php');
    echo $_POST['username'];
    $result = mysql_query("SELECT * FROM members WHERE username='" . $_POST["username"] . "' and password = '". $_POST["password"]."'");
    $row  = mysql_fetch_array($result);
    if(is_array($row)) 
    {
    $_SESSION["id"] = $row[ID];
    $_SESSION["username"] = $row[username];
    $_SESSION["password"] = $row[password];
    $_SESSION["mname"] = $row[mname];
    $_SESSION["fname"] = $row[fname];
    date_default_timezone_set("Asia/Calcutta");
    $lastlog=date("d/m/Y");
    $logtime=date("h:i a");
    $query = "UPDATE `members` SET `lastlogin`='$lastlog',`logintime`='$logtime' WHERE `ID`='$row[ID]'"; 
    mysql_query($query);
    $_SESSION['logged'] = TRUE; 
    } 
    else 
    {
        echo "<SCRIPT>
        alert('Wrong Username/Password or Awaiting Approval');
        </SCRIPT>";
        header("Location:login_failed.html");
    }
}
if(isset($_SESSION["id"])) {
header("Location:member/myprofile.php");
}
?>

每页上的PHP代码

<?php
session_start();
include('config.php');
if(!$_SESSION['logged'])
{
header("Location: ../login.html");
exit;
} ?>

最后注销

    <?php
session_start();
unset($_SESSION["id"]);
unset($_SESSION["username"]);
unset($_SESSION["password"]);
unset($_SESSION["mname"]);
unset($_SESSION["fname"]);
header("Location:../login.html");
?>

我的代码有什么问题吗? 我想念什么吗? 我做错了。 请帮助

谢谢大家解决了..

现在,您能告诉我在用户登录(会话存在)的情况下,如何将login.php重定向到用户主页(myprofile.php)-例如facebook,gmail等

您可以简单地使用session_destroy()来破坏所有当前会话数据,而不必在每个会话var上调用unset()

session_start();
session_destroy();
header("Location:../login.html");

为了获得完全的破坏力,您可能还想杀死会话cookie:

setcookie(session_name(), '', 1);

这个问题的会话注销一个更完整的例子。

您需要取消设置$_SESSION['logged']

另外,您还应该使用字符串引用$row变量中的键。 例如$row['username'];

通过error_reporting开启E_NOTICE级警告将对此有所帮助。

如果还没有,请重置会话登录

unset($_SESSION['logged']); 

或者只是将其更改为false

$_SESSION['logged'] = false;

当您第一次直接点击地址栏中的页面时,它会向服务器发送新请求,服务器将按照代码中的内容检查现有会话。 但是注销后按返回按钮时,情况并不相同。 在这种情况下,没有任何请求要发送到服务器,而是从浏览器缓存中获取请求。 如果要禁用这种情况,则必须明确告知浏览器不要将页面存储在缓存中。 有关更多详细信息,请通过此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM