【问题标题】:Log out from site [closed]从站点注销[关闭]
【发布时间】:2014-10-14 13:39:31
【问题描述】:

我使用我的项目 php oop。此类从数据库中获取详细日志并为用户创建会话。

<?php

 include("../Controller/DBConnection/DBConnectionController.php");
 session_start();

  class LoginModel {

public function getLogin() {
    $name = "";
    $type = "";

    if (isset($_POST["submit"]) && $_POST["submit"] == "submit") {

        $username = $_POST["username"];
        $password = $_POST["password"];

        $query = "SELECT username, password,'guser' AS type FROM g_user WHERE username = '$username' AND password = '$password' UNION
                    SELECT username, password,'suser' AS type FROM s_user WHERE username = '$username' AND password = '$password' UNION
                    SELECT username, password,'admin' AS type FROM admin WHERE username = '$username' AND password = '$password'";

        $result = mysql_query($query); 

        while ($row = mysql_fetch_array($result)) {
            $name = $row["0"];
            $type = $row["type"];
        }

        if (mysql_affected_rows() == 0) {
           return ("invalidlogin");
          // $_SESSION["Error"]=$username;   
        } else {
            $_SESSION["username"] = $name;
           // $_SESSION['userid']   = "";
            if ($type == "admin") {
                $_SESSION["adminname"] = $name;
                return ("adminlogin");

            }else if($type == "guser"){
                return ("guserlogin");

            }else if($type == "suser"){
                return ("suserlogin");

            }
        }
    }
}

}

我想在单击注销链接时注销我的网页。但是当我单击它时,再次加载登录页面,但是我单击浏览器后退按钮或查看另一个打开的标签,我再次加载以前的用户页面。当我登录到我在会话下创建的站点时,我怎么能做到这一点。

这是我的代码的视图类部分 .witch 显示注销链接。

                    <ul>
                        <li><a href="SUserHome.php">Home</a></li>
                        <li><a href="send D.php">Disease Details</a></li>
                        <li><a href="../../forum/forum_index.php" target="_blank">Forum</a></li>
                        <li><a href="#">History</a></li>
                        <li><a href="#">Contact</a></li>
                        <li><a href="../../Controller/logout.php" >Log Out</a></li>
                    </ul>       

这是logout.php

<?php

  if (session_id())
      session_destroy();

      header("location:../View/LoginView.php");

但是没有用。 请,我希望有一些解决方案。帮助我。

【问题讨论】:

    标签: javascript php html


    【解决方案1】:

    您应该检查是否存在会话变量以授予用户访问权限。要从您的站点注销,只需销毁会话,这将阻止访问有效地“注销”用户:

    session_start()
    session_destroy(); //destroy sessions but session data will still be avail on same page so redirect is needed after this
    header('location:index.php'); // redirect to login or index page or logout success page
    exit;
    

    session_start();
    unset($_SESSION); //will destroy session superglobal on current and subsequent pages
    echo $_SESSION['adminuser']; //will echo nothing at this point 
    header('location:index.php'); // redirect to login or index page or logout success page if you want
    exit;
    

    【讨论】:

    • 我必须创建新的 logout.php ..?
    • 这取决于你。您可以创建注销成功页面或简单地销毁会话并重定向到索引页面。
    • 我创建了新的 logout.php 并放置了这段代码,但是当我点击后退按钮时浏览器仍然会加载以前的用户详细信息。
    • 别忘了session_start(); 见已编辑。
    • @Anchove 谢谢你的回答。但是当我注销并再次单击浏览器后退按钮时,仍然会加载上一页。但它可能是一些时间编程错误....!我认为页面在没有会话的情况下加载........!
    【解决方案2】:

    您的session_unset() 正在立即执行。将其放在链接中的 URL 附近不会使其在您单击链接时执行。

    【讨论】:

      【解决方案3】:

      使用以下命令创建一个简单的 logout.php:

      <?php
      
      if(session_id())
          session_destroy();
      

      【讨论】:

      • 我可以把它放在我的'LoginView.php'页面中吗?如果可以的话,我把它放在html页面的哪里。?问候
      【解决方案4】:

      创建一个新文件 logut.php 并将这段代码放入其中

      session_destroy();
      unset($_SESSION['adminname']);
      header('location:login.php');
      

      【讨论】:

      • unset 不是必需的。 session_destroy 将“取消设置”会话变量,两者都是多余的。
      • 请编辑您的答案以添加对您的代码如何工作以及它如何解决 OP 问题的解释。很多 SO 发帖人都是新手,看不懂你贴的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 2013-02-23
      • 1970-01-01
      • 2014-02-11
      • 2012-10-30
      • 1970-01-01
      相关资源
      最近更新 更多