繁体   English   中英

PHP 如果登录则重定向用户

[英]PHP redirect user if logged in

我是PHP和MySql的新手,傻了还请见谅

我正在 UserSpice 登录管理框架之上为我的项目开发一个 web 应用程序

现在我创建了一个登录表单。 登录时将重定向到仪表板,这是一个引导管理模板。

我的登录页面是

本地主机/我的项目/index.php

我的仪表板页面是

本地主机/我的项目/account.php

现在发生的事情是,登录后我可以看到仪表板,假设如果我将 URL 更改为而无需注销

本地主机/我的项目

然后它显示登录表单而不是重定向到我的帐户.php。 但同时如果再次将 URL 更改为

本地主机/我的项目/account.php

在不要求我重新登录的情况下,它成功进入了 session。

我现在以其他方式交叉检查,就像我注销并尝试直接进入

本地主机/我的项目/account.php

现在不带我进去逻辑上要求我登录,因为我已经注销了。

我想要的是,如果我登录了,我想自动重定向到 account.php

因为我使用的是用户管理框架,所以我认为它会解决这个问题,但我现在正面临这个问题。 我稍微挖掘了一下,在框架中发现了以下代码,它检查用户是否未登录然后重定向到 index.php 但它不检查是否已登录然后它应该 go 到 account.php .

//If page does not exist in DB, allow access
    if (empty($pageDetails)){
      return true;
    }
    //If page is public, allow access
    elseif ($pageDetails['private'] == 0) {
      return true;
    }
    //If user is not logged in, deny access
    elseif(!$user->isLoggedIn())
    {
      Redirect::to(env('client').'index.php');
      return false;
    }

    else {
      //Retrieve list of permission levels with access to page

      $query = $db->query("SELECT permission_id FROM permission_page_matches WHERE page_id = ?",[$pageID]);

      $permission = $query->results();
      $pagePermissions[] = $permission;

      //Check if user's permission levels allow access to page
      if (checkPermission($pagePermissions)){
        return true;
      }
      //Grant access if master user
      elseif ($user->data()->id == $master_account){
        return true;
      }
      else {
        Redirect::to("index.php");
        return false;
      }
    } 

我试图在其中添加以下代码

 elseif(!$user->isLoggedIn())
        {
          Redirect::to(env('client').'index.php');
          return false;
        }
 elseif($user->isLoggedIn())
        {
          Redirect::to(env('client').'account.php');
          return true;
        }

但是,这对我没有帮助。 请帮我重定向到 account.php 如果用户已经登录并且不小心将 url 更改为登录表单。

更新:(执行@DanHoover 解决方案后)

根据@DanHoover i vardump 用户的建议。

如果我注销,我将得到以下转储

object(User)#3 (5) {
  ["_db":"User":private]=>
  object(DB)#4 (7) {
    ["_pdo":"DB":private]=>
    object(PDO)#5 (0) {
    }
    ["_query":"DB":private]=>
    object(PDOStatement)#6 (1) {
      ["queryString"]=>
      string(50) "SELECT id, page, private FROM pages WHERE page = ?"
    }
    ["_error":"DB":private]=>
    bool(false)
    ["_results":"DB":private]=>
    array(1) {
      [0]=>
      object(stdClass)#7 (3) {
        ["id"]=>
        string(2) "13"
        ["page"]=>
        string(9) "index.php"
        ["private"]=>
        string(1) "0"
      }
    }
    ["_resultsArray":"DB":private]=>
    array(1) {
      [0]=>
      array(3) {
        ["id"]=>
        string(2) "13"
        ["page"]=>
        string(9) "index.php"
        ["private"]=>
        string(1) "0"
      }
    }
    ["_count":"DB":private]=>
    int(1)
    ["_lastId":"DB":private]=>
    string(1) "0"
  }
  ["_data":"User":private]=>
  NULL
  ["_sessionName":"User":private]=>
  string(4) "user"
  ["_isLoggedIn":"User":private]=>
  NULL
  ["_cookieName":"User":private]=>
  string(18) "pmqesoxiw318374csb"
}

假设如果我登录了,我正在跟踪转储

object(User)#3 (5) {
  ["_db":"User":private]=>
  object(DB)#4 (7) {
    ["_pdo":"DB":private]=>
    object(PDO)#5 (0) {
    }
    ["_query":"DB":private]=>
    object(PDOStatement)#8 (1) {
      ["queryString"]=>
      string(50) "SELECT id, page, private FROM pages WHERE page = ?"
    }
    ["_error":"DB":private]=>
    bool(false)
    ["_results":"DB":private]=>
    array(1) {
      [0]=>
      object(stdClass)#6 (3) {
        ["id"]=>
        string(2) "13"
        ["page"]=>
        string(9) "index.php"
        ["private"]=>
        string(1) "0"
      }
    }
    ["_resultsArray":"DB":private]=>
    array(1) {
      [0]=>
      array(3) {
        ["id"]=>
        string(2) "13"
        ["page"]=>
        string(9) "index.php"
        ["private"]=>
        string(1) "0"
      }
    }
    ["_count":"DB":private]=>
    int(1)
    ["_lastId":"DB":private]=>
    string(1) "0"
  }
  ["_data":"User":private]=>
  object(stdClass)#7 (29) {
    ["id"]=>
    string(1) "1"
    ["email"]=>
    string(25) "myid@mysite.com"
    ["username"]=>
    string(5) "admin"
    ["password"]=>
    string(60) "$2y$12$1v06jm2KMOXuuo3qP7erTuTIJFOnzhpds1Moa8BadnUUeX0RV3ex."
    ["fname"]=>
    string(4) "Raja"
    ["lname"]=>
    string(5) "Gopal"
    ["permissions"]=>
    string(1) "1"
    ["logins"]=>
    string(2) "27"
    ["account_owner"]=>
    string(1) "1"
    ["account_id"]=>
    string(1) "1"
    ["company"]=>
    string(9) "UserSpice"
    ["stripe_cust_id"]=>
    string(0) ""
    ["billing_phone"]=>
    string(0) ""
    ["billing_srt1"]=>
    string(0) ""
    ["billing_srt2"]=>
    string(0) ""
    ["billing_city"]=>
    string(0) ""
    ["billing_state"]=>
    string(0) ""
    ["billing_zip_code"]=>
    string(0) ""
    ["join_date"]=>
    string(19) "2016-01-01 00:00:00"
    ["last_login"]=>
    string(19) "2016-03-17 05:08:20"
    ["email_verified"]=>
    string(1) "1"
    ["vericode"]=>
    string(6) "322418"
    ["title"]=>
    string(0) ""
    ["active"]=>
    string(1) "0"
    ["custom1"]=>
    string(0) ""
    ["custom2"]=>
    string(0) ""
    ["custom3"]=>
    string(0) ""
    ["custom4"]=>
    string(0) ""
    ["custom5"]=>
    string(0) ""
  }
  ["_sessionName":"User":private]=>
  string(4) "user"
  ["_isLoggedIn":"User":private]=>
  bool(true)
  ["_cookieName":"User":private]=>
  string(18) "pmqesoxiw318374csb"
}

然后我尝试了你的建议

if (isset($user)) {
Redirect::to('users/account.php');
}

现在发生的情况是,如果我登录,它会完美地重定向到 account.php。 但是,假设如果我注销,它会显示 Following error

在此处输入图像描述

如果您已经登录,我不确定100%如何获得登录表单。确定要登录吗? 您可以做的几件事...

登录UserSpice后,您可以访问名为$ user的变量。 如果不存在,则您没有登录。这为您提供了一些选择。 为了测试目的,您可以在php中的任何页面上执行

dump($user); //will give you a preformatted var_dump of the user variable.

如果再次出现错误,则表明您尚未登录。如果它给出了格式精美的var_dump,则您可以。 确定您已登录后,就可以处理重定向。

如果我正确理解了您的问题,那么您希望该网站在用户登录后的行为有所不同。我的正确说法是您不想让登录用户进入首页。

因此,您要执行的操作是,在检查页面是否为安全页面(类似于isSecurePage或类似名称的页面)的行之后,进入根目录和页面顶部的index.php中。

if (isset($user)) {
Redirect::to('users/account.php');
}

如果不是,那真的很接近。 基本上...您正在检查该用户变量是否存在,如果存在,则要使用内置的静态函数将其重定向到某个位置。

让我知道是否可以解决。

我通过在index.php中添加以下代码成功解决了它

<?php
if ($user->isLoggedIn()) {
Redirect::to('account.php');
}
?>

我对@DanHoover表示感谢,因为只有在我继续前进的过程中,他才发挥了领导作用。 多谢同伴。

试试这个-

 <?php
  session_start();

  if((isset($_SESSION["user"]))) 
  {
    header("Location: account.php");
  }
 ?>

暂无
暂无

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

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