博主信息
虞者自愚的博客
博文
42
粉丝
3
评论
2
访问量
23630
积分:0
P豆:349

用session进行 PHP登录 后台验证

2018年04月23日 10:04:44阅读数:3966博客 / 虞者自愚的博客/ PHP作业

PHP登录实例 后台验证


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>数组的排序</title>
    <style type="text/css">
        .box {width:90%;line-height:1.2em;border:1px dotted #d6d6d6;padding-left:15px;background-color:#f5f5f5;margin:10px auto;font-family:微软雅黑;}
        .box1 {width:90%;line-height:1.5em;border:1px dotted #d6d6d6;background-color:#f2edd7;font-family:微软雅黑;}
        .box p {margin-left:20px;font-size:14px;}
        hr {height:1px;width:95%;border:none;border-top:1px dashed #666;}
    </style>
</head>
<body>
<?php
session_start(); //开启会话
echo '<div class="box">';
echo '<h4>首页</h4>';
echo '<div class="box1">';
echo ' <p>判断是否登录<p>';

if ((isset($_SESSION['user_id'])) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
    echo '<a href="logout.php">退出</a>';
} else {
    echo '<a href="login.php">登录</a>';
}

echo '</div>';
echo '<br>';
echo '</div>';
?>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例



登录验证


实例

<?php 
//开启会话
session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //加载公共函数库
    require ('inc/function.php');

    //连接数据库
    require ('inc/connect.php');

    //验证登录
   
    list($check, $data) = check_login($dbc, $_POST['email'], $_POST['password']);

    //验证通过
    if ($check) {
        
        //设置session会话
        $_SESSION['user_id'] = $data['user_id'];
        $_SESSION['user_name'] = $data['user_name'];

        //跳转页面
        redirect_user('loggedin.php');
    } else {
        //验证失败
        $errors = $data;
    }

    //关闭数据库连接
    mysqli_close($dbc);
}

//加载
include('login_page.php');

运行实例 »

点击 "运行实例" 按钮查看在线实例


退出登录/删除会话 

退出登录,进入登录界面,或首页 显示为未登录状态


实例

<?php
//开启会话
session_start();

if (!isset($_SESSION['user_id'])) {
    require ('inc/function.php');
    //跳转到默认首页
    redirect_user();
} else {
  
    //删除会话
    $_SESSION = [];
    session_destroy();
    setcookie('PHPSESSID', '', time()-3600);
}

//设置页面标题
$page_title = '已经登录';
include ('inc/header.php');

//打印退出信息,并提供登录功能
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;

运行实例 »

点击 "运行实例" 按钮查看在线实例


后台验证


实例

<?php

function redirect_user($page = 'index.php')
{
   //默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    //如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    //添加当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    //跳转到指定目标地址
    header('Location:'. $url);

    exit();
}

/医院
 * 验证用户登录
 * @param $dbc
 * @param string $email
 * @param string $password
 */
function check_login($dbc, $email='', $password='')
{
    //初始化错误信息数组
    $errors = [];

    //验证邮箱
    if (empty($email)) {
        $errors[] = '邮箱地址不能为空';
    } else {
        //mysqli_real_escape_string():转义字符串的特殊字符
        $e = mysqli_real_escape_string($dbc, trim($email));
    }

    //验证密码
    if (empty($password)) {
        $errors[] = '密码不能为空';
    } else {
        $p = mysqli_real_escape_string($dbc, trim($password));
    }

    //非空验证通过,即$error数组为空
    if (empty($errors)) {
        //根据邮箱与密码来查询用户id与用户名
        $sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') ";

        //执行查询
        $res = mysqli_query($dbc, $sql);

        //查询成功应该返回唯一一条记录
        if (mysqli_num_rows($res) == 1) {

            //将查询结果解析到数组中
            $row = mysqli_fetch_array($res, MYSQLI_ASSOC);

            //返回查询结果
//         
            return [true, $row];
        } else { //查询失败
            $errors[] = '邮箱或密码不正确,请重新输入';
        }
    }
    return [false, $errors];
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

 

数据库连接


实例

<?php
//创建连接参数: 因为连接参数不会经常变化,所以推荐使用常量
define ('DB_HOST', 'localhost');
define ('DB_USER', 'root');
define ('DB_PASS', 'root');
define ('DB_NAME', 'php');
define ('DB_CHAR', 'utf8');

$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//连接失败一定会返回错误编号,可以根据编号判断,也可用 $db是否为false进行判断
if (mysqli_connect_errno($dbc)) {
    echo '连接失败'.mysqli_connect_error($dbc);
}

mysqli_select_db($dbc, DB_NAME);  //选择要操作的数据库
mysqli_set_charset($dbc, DB_CHAR); //设置客户端默认字符编码集

运行实例 »

点击 "运行实例" 按钮查看在线实例


操作流程

登录表单(登录页) — 登录验证(连接后台信息验证) — 数据库连接 — 后台验证(登录信息验证)— 退出登录

有信息交互的 必须要  开启会话  session_start()




批改状态:未批改

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • php设置cookie记住密码的方法:1、在login.php页面中,表单设置;2、页面表单信息,并创建cookie;3、检session,利cookie赋值即可。
    php实现码的方法:首先产生4到6位数的随机码;然把产生的每个字符保存到session或数据库;接着将码发送到户的手机;最将和输入的对比即可。
    解决方法:1、微信公众平,点击菜单栏的“设置”;2、在“基本信息”中邮箱修改,填写新邮箱(微信小程序的邮箱)与码,邮箱即可。
    php页面跳转的实现方法:首先在提示的同时,在session或者cookie中记下请求页面的URL;然成功,跳转回该URL即可。
    php实现一个账号只能有一个人的方法:首先将session信息存在redis中;然将session_id存到mysql数据库中;接着session是否过期;最openfire推送消息,并将
    phpcms码出错的解决办法:首先找到文件;然找到【login.tpl.php】文件;最码本地地址的代码更换为个人所使的域名地址即可。
    php清除服务器session的方法:首先清除服务器session使【删除 /tmp 下的所有文件】;然重启所有服务;最户需要重新即可。
    uniapp申请微信的方法:首先注册微信开放平企业认;然获取appid和秘钥;接着在户端代码中入“manifest.json”设置;最实现点击方法代码即可。
    PHP中token的使方法:1、客户端户输入户名密码,请求token;2、使JWT这种规范,生成token;3、token的时效性;4、客户端拿token请求数据。
    DEDECMS V5.5正向整合Discuz 6.0的方法:首先Discuz V6;然在通部分,启;接着填好对应的注册、以及退出地址;最修改DEDECMS的“index_do.php
    php实现忘记密码的功能方法:首先通过表单输入注册时的邮箱;然户邮箱是否正确;接着户信息的字符串,并构造URL发送到户邮箱中;最实现邮箱收取邮件,并入重置密码页面重新设置新密码即可
    php禁止重复提交的实现方法:首先从前端做限制;然在提交做redirect页面重定向;接着在数据库中做唯一索引约束;最session令牌即可。
    php设置图片码的方法:首先产生随机字符串,并使session保存;然创建一张简单的图片,并设置背景色,文本色,再加一些干扰线,干扰素;接着将产生的随机字符串填充图片;最清空输出缓存区,再生成码图片即可
    使Spring Session和Redis解决分布式Session跨域共享问题,现象阐述,在项目中前端代码未做分离,在两实例的情况下服务正常运偶尔会弹出类似需要重新的提示,报错信息这是处理器异常
    php收藏功能的实现方法:首先创建好数据库表 ;然创建前代码,实现界面;接着通过html实现收藏样式;最使php处理即可。
    php实现更新功能的方法:首先制作升级包,增量更新;然上传文件,并当前系统版本;接着备份原来的代码,并当升级失败时回滚;最升级日志,返回升级度即可。
    解决方法:1、通过cmd命令输入sqlplus,入sqlplus;2、搜索“Oracle 11g默认户名,密码”,会显示很多相关的默认户名和密码的信息;3、默认户名和密码逐一,查看是否可以即可
    php实现qq的方法:首先认开发者;然创建网站应并审核;接着下载PHP版本SDK,并设置网站回调域;最访问connect目配置并开发即可。
    php实现单点的原理是:首先将信任存储在客户端的cookie中;然一步cookie即可。为了高效存储大量临时性的信任数据,可以采类似与memcached的分布式缓存的方案。
    申请搭建小程序的方法:首先入公众平点击注册;然选择小程序类型;接着邮箱;最填写主体户类型信息即可。