apache php 调优_php原生实现登陆注册

用原生的php和html做了一个登陆注册:

  1. 这个是多入口,一般程序都是单入口,单入口就是统一通过index.php进入,然后再引入其他文件,调用其代码,多入口就是每次通过不同文件进入(比如一会展示的login.php和register.php)
  2. 保留登陆信息用的是session,现在普遍是前后端分离,一般用cookie或者redis实现session的功能,很少直接使用session的
  3. 连接mysql使用的是mysqli,没有做封装,也没有使用pdo,除了能用没有其他优点了
  4. 这种样子的代码大概是上世纪的风格了,MVC都没用,看一看好了,真的开发再不济也要MVC分一下层
  5. 性能杠杆的,不要信任何框架的吹嘘,就性能而言,没有任何框架快得过原生。

准备工作

emmmm,首先用nginx或者Apache创建一个站点指向本地代码的目录,然后在host里配置127.0.0.1指向该站点。后是一个user库的sql,和登陆和注册的前端代码页面(不好意思说这是代码):

  1. sql
CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(64) NOT NULL DEFAULT '' COMMENT '账号',
  `password` varchar(64) NOT NULL DEFAULT '' COMMENT '密码',
  `nickname` varchar(64) NOT NULL DEFAULT '' COMMENT '昵称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  1. login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
<form action="login.php" method="post">
    账 号 <input type="text" name="username"> <br>
    密 码 <input type="password" name="password"> <br>
    <button type="submit">提交</button>
</form>
<a href="register.html">没有账号?注册</a>
</body>
</html>
  1. register.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
<form action="register.php" method="post">
    账 号 <input type="text" name="username"> <br>
    密 码 <input type="password" name="password"> <br>
    昵 称 <input type="text" name="nickname"> <br>
    <button type="submit">注册</button>
</form>
</body>
</html>

正文

  1. 首页index.php
    假设我们的网站有个首页,需要判断用户是否登陆,登陆就欢迎他,没有登陆就让他去登陆,这个思路我们这么写
<?php
session_start(); 
if (!$_SESSION['nickname']) {
    header("location:login.html");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
Hello <?php echo $_SESSION['nickname'] ?>
</body>
</html>
  1. 这行session_start() 是开启session,必须在最开始写,保证我们可以使用session相关的功能
  2. 如果当前session里没有存用户的昵称,那我们就认为该用户没有登陆,跳转到登陆界面
  3. 跳转是通过header的方式,参数重location后边是目标地址
  4. <?php echo $_SESSION['nickname'] ?>这段代码可以镶嵌在.php文件的html代码的任何一个地方,echo出来的字符在html中具有等同的功能
  5. 这样的就是前后端代码混杂,如果项目庞大之后非常难于维护
  1. 登陆部分login.php
    这部分处理登陆请求,假设用户输入了账号密码这样的数据(前端和后端都应该对数据进行校验和处理,本文略去),然后拿到用户信息,判断用户密码是否正确,让用户成功登陆或者重新输入。
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$password_md5 = md5('study'.$password);
//连接mysql
$db = new MySQLi("localhost","root","root","allcanadmin",'8889');
$sql = "select * from `user` where `username`= '{$username}'";
$res = $db->query($sql);
$user = $res->fetch_array();
if ($password_md5 == $user['password']){
    $_SESSION['nickname'] = $user['nickname'];
    header("location:index.php");
}else{
    header("location:".getenv('HTTP_REFERER'));
}  
  1. 首先也是启用了session,因为登陆登陆成功之后要通过session保存用户信息这样才能在其他页面确认用户是已经登陆的状态了。
  2. $_POST和$_GET是php自带的两个全局数组,保存了当前请求的post和get参数,比如这次登陆请求的from表单的传递用户名的input标签的name=username,并且请求方式是post,该参数就会在$_POST数组中,key是input标签的name,value是input标签的value。
  3. 业界通用的一个操作,服务器不要存用户的明文密码。本文通过用一个字符串拼接然后计算md5之后再保存(这只是一个比较简单的方式)
  4. new MySQLi(地址,用户名,密码,库名,端口) 创建一个mysqli对象(mysqli是一个更安全更好用的替代原来mysql的扩展,mysql扩展已被弃用),这个对象可以操作mysql库。
  5. $res = $db->query($sql); mysqli的对象$db运行query方法,执行参数的sql语句,这里的sql是查询用户名为用户输入用户名的数据,保存在结果对象$res里,再通过结果对象的fetch_array()方法,获取到结果保存为一个数组。
  6. getenv('HTTP_REFERER') 获取环境变量,这里是取到上一个页面地址,用来做返回,如果用户登陆失败,返回到登陆界面。
  1. 注册部分register.php
    这部分处理注册业务,注册理论上要控制用户名不能重复,可以通过mysql唯一索引或者代码处查询的方式保证唯一,本文采用查询的方式。
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$password_md5 = md5('study'.$password);
$nickname = $_POST['nickname'];
$db = new MySQLi("localhost","root","root","allcanadmin",'8889');
$sql_select = "select * from `user` where `username`= '{$username}'";
$res_select = $db->query($sql);
if ($res_select){
    header("location:".getenv('HTTP_REFERER'));
}
$sql = "insert into `user` (`username`,`password`,`nickname`) VALUES ('{$username}','{$password_md5}','{$nickname}')";
$res = $db->query($sql);
if ($res){
    header("location:login.html");
}else{
    header("location:".getenv('HTTP_REFERER'));
}  
看懂登陆,注册实现就很容易了,查找不到这个账号则表明该账号是可以注册的,新增一条数据就好了。

写在最后

做个小demo,登陆注册真是不能再简单了,搬砖的工作大多也就是这样了,拿参数,走业务,跑sql,反结果。

很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​shimo.im
3adfb617359e5fbf6113cdd87f02440a.png

或 者关注咱们下面的知乎专栏

PHP大神进阶​zhuanlan.zhihu.com
a4cedfbb7b496dd1eb45f72bddadb96e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值