1. cookie实现用户登录与验证

    cookie,服务器创建在浏览器端用来记录用户数据的文本,方便用户的识别,有助于提到用户的体验,同时也可以利用cookie控制用户对页面的浏览权限。cookie在一段时间后自动消失,可以设置过期的时间。

    用户登录与验证有以下几个部分:

    (1)主页index.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>
    <h1>我是页面的公共头部</h1

    运行实例 »

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

    底部:

    实例

    <h1>我是底部</h1>
    </body>
    </html>
    运行实例 »

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

    主页主体部分:

实例

<?php
//导入公共头部
include 'inc/header.php';

echo '<h2 style="color:skyblue;">我是首页</h2>';
//判断用户是否已经登录,是否存在cookie,
if (isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) !='logout.php'){
    echo '<a href="logout.php">退出</a>';
}else{
    echo '<a href="login.php">登录</a>';
}
//print_r(dirname($_SERVER['PHP_SELF']));
//导入底部
include 'inc/footer.php';
运行实例 »

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

    (2)登录页面

    登录处理页面login.php,对表单数据进行验证

    实例

<?php
/**
 *接受验证登录表单数据
*/

if ($_SERVER['REQUEST_METHOD'] =='POST'){//判断提交类型是否post
    //加载函数库
    require 'inc/function.php';
    //连接数据库
    require 'inc/connect.php';

    //验证登录
    list($check, $data) = check_login($dbc,$_POST['email'],$_POST['password']);
    //检测验证结果
    if ($check){
        //验证成功,开启cookie
         setcookie('id',$data['user_id']);
         setcookie('name',$data['user_name']);
         //跳转
        redirect_user('logged_in.php');
    }else{
        //验证失败,返回错误信息
        $errors = $data;//在登录表单那里输出
    }
    //关闭数据库连接
    mysqli_close($dbc);
}

include 'log_page.php';//加载登录表单页面
运行实例 »

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

        

    登录表单log_page.php,用户填写数据

实例

<?php
//登录表单
$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:skyblue">用户登录</h2>
<form action="login.php" method="post">
    <p>
        <label for="email">邮箱:</label>
        <input type="email" name="email" id="email" value="<?php echo isset($_POST['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'; ?>

运行实例 »

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


    登录完成页面:

    

实例

<?php
/**
 * 登录成功的页面
 */

//判断是否登录成功
if (!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user();//没登录调回首页
}

$page_title = '登录成功';
//导入头部
require 'inc/header.php';

//heredoc 长字符串
echo <<<DDD
<h2 style="color:red;">登录成功</h2>
<h2>欢迎您:亲爱的{$_COOKIE['name']}</h2>
<h2><a href="logout.php">退出</a></h2>
DDD;
运行实例 »

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


    登出页面:logout.php

    

实例

<?php
/**
 * 退出页面
 */
//是否登录成功
if (!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user('index.php');
}else{
    setcookie('id','',time()-3600);
    setcookie('name','',time()-3600);
}

$page_title = '退出登录';
include  'inc/header.php';

echo <<<DDD
<h2 style="color:red;">退出成功</h2>
<h2><a href="login.php">登录</a></h2>
DDD;
运行实例 »

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


2. session实现用户登录与验证

session实现用户登录与验证和cookie的方法基本一样,把cookie换成session就可以了

在登录成功时,设置用户的session数据,然后再其他页面就可以通过验证这个session是否存在就可以了

实例

<?php
/**
 *接受验证登录表单数据
*/
session_start();
if ($_SERVER['REQUEST_METHOD'] =='POST'){//判断提交类型是否post
    //加载函数库
    require 'inc/function.php';
    //连接数据库
    require 'inc/connect.php';

    //验证登录
    list($check, $data) = check_login($dbc,$_POST['email'],$_POST['password']);
    //检测验证结果
    if ($check){
        //验证成功,设置session
         $_SESSION['id'] = $data['user_id'];
         $_SESSION['name'] = $data['user_name'];
         //跳转
        redirect_user('logged_in.php');
    }else{
        //验证失败,返回错误信息
        $errors = $data;//在登录表单那里输出
    }
    //关闭数据库连接
    mysqli_close($dbc);
}

include 'log_page.php';//加载登录表单页面

运行实例 »

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


实例

<?php
/**
 * 退出页面
 */
//是否登录成功
session_start();
if (!isset($_SESSION['id'])){
    require 'inc/function.php';
    redirect_user('index.php');
}else{
    session_destroy();
    setcookie('PHPSESSID','',time()-3600);
}

$page_title = '退出登录';
include  'inc/header.php';

echo <<<DDD
<h2 style="color:red;">退出成功</h2>
<h2><a href="login.php">登录</a></h2>
DDD;
运行实例 »

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


3.cookie和session的优缺点:

8.31.jpg