IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP&JavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作) -> 正文阅读

[PHP知识库]PHP&JavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)

最近在搞最原始的PHP,发现前后端分离的项目,的确比用模板引擎的项目好。至少在用户体验上好太多(不看占用内存方面)。估计以后还是要用vue开发前端,做前后端分离。

这里后端的源码是这样的逻辑,提交表单后走的是这一串代码:

$useName = trim($_POST["userName"]);
$password = trim($_POST["password"]);
$captcha = trim($_POST["captcha"]);

if(empty($useName) || empty($password)){

    $this->error("用户名或密码不能为空", "", "", "login");
}
if(empty($captcha)){

    $this->error("验证码不能为空", "", "", "login");
}
if(Captcha::checkCaptcha($captcha)){

    $this->error("验证码错误", "", "", "login");
}

然后对应的error函数是这样的:

protected function error($msg, $platform, $controller, $action, $time = 3){

    if(!$platform){

        $platform = P;
    }

    if(!$controller){

        $controller = C;
    }

    if(!$action){

        $action = A;
    }

    echo $msg;
    
    $refresh = "Refresh:" . $time . ";url=" . URL . "index.php?p=" . $platform . "&c=" . $controller . "&a=" . $action;
    header($refresh);
    exit;
}

如下不输入任何点击登录后:

?会先进入这个页面:

然后又回到登录页面了,这太拉跨了。

用Fiddler抓下看看:

第一个包:

?

可以从Refresh中看到为3,代表3秒后进入后面那个url,然后body里面的字符串被打印到浏览器上。整个架构设计就是用的php加smarty模板引擎,没有使用前后端分离。

修改逻辑:

这里把refresh改成0,然后url那里加个msg=用户名或密码不能为空。前端用个js,把这个msg获取到,然后放到开头提示用户,只能这样了。搞个野路子了。

php修改如下:

protected function error($msg, $platform, $controller, $action, $time = 0){

    if(!$platform){

        $platform = P;
    }

    if(!$controller){

        $controller = C;
    }

    if(!$action){

        $action = A;
    }

    $encodingMsg = urlencode($msg);
    $refresh = "Refresh:" . $time . ";url=" . URL . "index.php?p=" . $platform . "&c=" . $controller . "&a=" . $action . "&msg=" . $encodingMsg;
    header($refresh);
    exit;
}

前端

增加js代码:

window.onload = function (){

        
    let msg = decodeURI(getQueryVariable("msg"));
    if(msg != "false"){

        let mainDiv = document.getElementById("mainDiv");
        mainDiv.insertAdjacentHTML("afterbegin", "<div id='alter' class='alert border rounded-3' role='alert'>" + msg + "</div>");
    }
}

其中mainDiv是body后面的第一个div

还是这个页面:

点击登录后:

?这样的话,用户体验会稍微高一点点。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:28:51  更:2022-02-09 20:29:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:41:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码