登录  /  注册
博主信息
博文 87
粉丝 0
评论 0
访问量 56946
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
第八章:实战cookie实现用户登录
黄忠倚的博客
原创
1032人浏览过

实例 index.php

<?php
$page_title = '首页';

//导入头部
include('inc/header.php');
echo '<h2 style="color:red">我是首页</h2>';

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

//导入底部
include('inc/footer.php');

运行实例 »

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

实例 loggedin.php

<?php
//用户没有登录的验证
if(!isset($_COOKIE['user_id'])) {
    require ('inc/function.php');
    redirect_user();
}
//如果已经登录
//设置页面标题
$page_title = '已经登录';

//导入头部
include ('inc/header.php');

//打印欢迎信息
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您:{$_COOKIE['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;

//导入底部
include ('inc/footer.php');

运行实例 »

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

实例 login.php

<?php

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) {
        //设置cookie
        setcookie('user_id', $data['user_id']);
        setcookie('user_name', $data['user_name']);

        //跳转页面
        redirect_user('loggedin.php');
    }  else {
        $errors = $data;
    }
    //关闭连接
    mysqli_close($dbc);
}

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

运行实例 »

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

实例 login_page.php

<?php
/**
 * 用户登录页面
 * 1.输出用户的错误信息
 * 2.输出登录表单:当前的表单渲染
 */
$page_title = '用户登录';
//导入头部
include('inc/header.php');

//打印错误信息
if(isset($errors) && !empty($errors)) {
    $errors_msg = '<p style="color:red">';
    foreach ($errors as $msg) {
        $errors_msg .= $msg. '<br>';
    }
    echo $errors_msg. '</p>';
}
?>

<h2 style="color:red">用户登录</h2>
<form action="login.php" method="post">
    <p>
        <label for="email">邮箱:</label>
        <input type="email" name="email" id="email" value="<?php echo isset($_PSOST['email'])?$_POST['email']:' '?>">
    </p>
    <p>
    <label for="password">密码:</label>
    <input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>">
    </p>
    <p>
        <button type="submit" name="submit" id="submit">登录</button>
    </p>
</form>

<?php
//导入底部
include('inc/footer.php');
?>

运行实例 »

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

实例 logout.php

<?php
//如何没有登录的验证
if(!isset($_COOKIE['user_id'])) {
    require ('inc/function.php');
    //跳转到默认首页
    redirect_user();
} else { //删除cookies
    setcookie('user_id','',time()-3600);
    setcookie('user_name','',time()-3600);
}

//退出登录
$page_title = '退出成功';
//导入头部
include ('inc/header.php');

//打印欢迎信息
echo <<<"WELCOME"
<h2 style="color: red">退出成功</h2>
<p>欢迎您:{$_COOKIE['user_name']}</p>
<p><a href="login.php">登录</a> </p>
WELCOME;

//导入底部
include('inc/footer.php');

运行实例 »

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

实例 inc/connect.php

<?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);

if (mysqli_connect_errno($dbc)) {
    echo '连接失败'.mysqli_connect_error($dbc);
}
mysqli_select_db($dbc,DB_NAME);
mysqli_set_charset($dbc,DB_CHAR);

运行实例 »

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

实例 inc/function.php

<?php
/**
 * 用户自定义跳转地址
 * @param string $page
 */
function redirect_user($page = 'index.php')
{
    //默认地址
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    //去掉右侧的/,\
    $_url - rtrim($url, '/\\');

    //生成自定义跳转地址
    $url .= '/'.$page;

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

    //退出当前的函数或脚本
    exit();
}

/**
 * @param $dbc
 * @param string $email
 * @param string $password
 * @return array
 */

function check_login($dbc,$email='',$password='')
{
    //创建错误信息数组
    $errors = [];

    //验证邮箱
    if(empty($email)){
         $errors[]= '邮箱地址不能为空';
    } else {
        $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') "; //注意此处的FROM

            //执行查询
        $res = mysqli_query($dbc,$sql);
            //查询成功应该返回唯一一条记录
        if(mysqli_num_rows($res) ==1) {
            //将查询结果解析到数组中
            $row = mysqli_fetch_array($res,MYSQLI_ASSOC);

            //返回查询结果
//            print_r($row);die();
//            print_r($row);exit();
            return [true, $row];

            //注意此处的return不要写错了!
        } else{
            $errors[] = '邮箱或密码不正确,请重新输入';
        }
    }

    return [false,$errors];
}

运行实例 »

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

实例 inc/header.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?php
            echo isset($page_title) ? $page_title : '默认标题';
        ?></title>

</head>
<body>

<h3>我是公共头部的代码</h3>

运行实例 »

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

实例 inc/footer.php

<h3>我是公共底部的代码</h3>
</body>
</html>

运行实例 »

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

实例 demo1.php

<?php
//1.设置cookies
setcookie('userName','Kevin Wong',time()+3600);
setcookie('email','KevinW@php.cn');

//2.查看:$_cookie
echo '用户名:', $_COOKIE['userName'],'<br>';
echo '邮箱:', $_COOKIE['email'],'<br>';

//3.更新
//$_COOKIE['userName'] = 'aaa';
setcookie('userName','Kevin Wong');

//4.删除
//方法:1
//setcookie('userName');
//方法:2
//setcookie('userName');
//方法:3
//setcookie('userName','',time()-3600);

运行实例 »

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


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学