php里面普通用户登录成功而管理员登录失败,session问题,以及用户页面登录成功后的不能login页面报错问题...

老师我在6-10章节中有个问题我在login页面的时候打印session的数据显示正常

b6a194c9618be53bbdff4caae991c2bd.png

但我的admin用户登录成功后可以正常跳转到后台index页面但是看打印session的数据时候就显示错误了

905556ceb673958ee94989f446969ced.png

而且只要登录成功后再打开login页面就显示下图不能显示页面只能清空缓存才能正常显示login页面回事什么问题谢谢

f5a75883a66367bf8e7c04d1d6eda957.png

我的login 控制器代码

namespace appadmincontroller;

use thinkacadeView;

use appcommonmodelmysqlAdminUser;

class Login extends AdminBase {

//如果用户已经登录跳转到后台首页

public function initialize() {

if ($this -> isLogin()) {

return $this -> redirect(url("index/index"));

}

}

//加载Login登录页面模板

public function index() {

return View::fetch();

}

//生成admin的md5密码

public function md5() {

dump (session(config("admin.session_admin")));

echo md5("admin_roger"); //admin_roger是加密隐藏字符串

}

//登录页面检查

public function check() {

//检查判断登录页面是否是用Post方式传过来的请求如果不是发出错误提醒

if (!$this -> request -> isPost()){

return show(config("status.error"),"登录请求方式错误");

}

//参数校验 1.原生方式

$username = $this -> request -> param("username", "", "trim");

$password = $this -> request -> param("password", "", "trim");

$captcha = $this -> request -> param("captcha", "", "trim");

if (empty($username) || empty($password) ||empty($captcha)) {

return show(config("status.error"), "登录时提交内容不能为空");

}

//校验 验证码是否正确使用TP6方法,使用此方法须要在app目录下的middleware.php中开启Session初始化

if (!captcha_check($captcha)) {

//验证码校验失败

return show(config("status.error"), "验证码错误请检查");

}

try{

//从数据库中获取用户数据

$adminUserObj = new AdminUser();

$adminUser = $adminUserObj -> getAdminUserByUsername($username);

//如果数据库表用户为空或者admin的用户状态不等于status.php文件的mysql.table_normal设置

if (empty($adminUser) || $adminUser -> status != config("status.mysql.table_normal")) {

return show(config("status.error"), "用户名不存在");

}

$adminUser = $adminUser -> toArray(); //把$adminUser对象转换为字符串

//判断密码是否正确

if ($adminUser['password'] !=md5($password."_roger")) {

return show(config("status.error"), "密码错误");

}

//更新信息到MySQL表中

$updateData = [

"last_login_time" => time(),

"last_login_ip" => request() -> ip(),

"update_time" => time(),

];

$res = $adminUserObj -> updateById($adminUser['id'], $updateData);

if (empty($res)) {

return show(config("status.success"), "登录失败");

}

} catch (Exception $e) {

//todo 记录日志 $e -> getMessage() "内部错误通过日志方式获取到日志文件中

return show(config("status.success"), "内部日常登录失败");

}

//记录session,配置文件在admin/config/admin.php

session(config("admin.session_admin"),$adminUser);

return show(config("status.success"), "登录成功");

}

namespace app\admin\controller;

use app\BaseController;

use think\exception\HttpResponseException;

class AdminBase extends BaseController

{

public $adminUser = null;

/**

* 初始化基础控制器

*/

public function initialize()

{

parent::initialize();

// // TODO: 判断是否登录,如果用户的session为空,跳转到登陆页

// if (empty($this -> isLogin()))

// {

// return $this -> redirect(url("login/index"), 302);

// }

}

/**

* 判断用户是否已经登录

* @return bool

*/

public function isLogin()

{

$this -> adminUser = session(config("admin.session_admin"));

if (empty($this -> adminUser))

{

return false;

}

return true;

}

/**

* redirect方法定义

* @param mixed ...$args

*/

public function redirect(...$args)

{

throw new HttpResponseException(redirect(...$args));

}

}

要实现管理员普通用户登录并区分,可以通过以下步骤: 1. 创建一个用户表,表中包含用户ID、用户名、密码、用户类型等字段。 2. 在登录页面中添加一个下拉框,让用户选择登录类型,例如管理员普通用户。 3. 用户输入用户名和密码后,通过查询用户表获取用户信息,包括用户类型。 4. 根据用户类型的不同,展示不同的页面或功能。例如,如果是管理员登录,则可以进入管理后台,如果是普通用户登录,则可以进入普通用户页面。 以下是一个 PHP 登录页面实现管理员普通用户登录并区分的示例代码: ``` <?php session_start(); if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; $usertype = $_POST['usertype']; //连接数据库,查询用户信息 $conn = mysqli_connect('localhost','root','password','dbname'); $sql = "SELECT * FROM user WHERE username='$username' AND password='$password' AND usertype='$usertype'"; $result = mysqli_query($conn,$sql); //判断用户是否存在 if(mysqli_num_rows($result)==1){ $row = mysqli_fetch_assoc($result); //保存用户信息到 Session 中 $_SESSION['userid'] = $row['id']; $_SESSION['username'] = $row['username']; $_SESSION['usertype'] = $row['usertype']; //跳转到不同的页面 if($usertype=='admin'){ header('Location: admin.php'); }else{ header('Location: user.php'); } }else{ echo "用户名或密码错误!"; } } ?> <!DOCTYPE html> <html> <head> <title>登录页面</title> </head> <body> <form method="post"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <label>用户类型:</label> <select name="usertype"> <option value="admin">管理员</option> <option value="user">普通用户</option> </select><br> <input type="submit" name="submit" value="登录"> </form> </body> </html> ``` 在上面的代码中,通过 $_POST[] 获取用户输入的用户名、密码和用户类型,然后通过 SQL 语句查询用户表中是否存在该用户,并且用户类型是否正确。如果查询到该用户,就将用户信息保存到 Session 中,并且根据用户类型跳转到不同的页面。如果查询不到该用户,则提示用户名或密码错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值