Blogger Information
Blog 55
fans 0
comment 0
visits 50477
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP-COOKIE用户登入与验证-0831
Bean_sproul
Original
808 people have browsed it

一、cookie:

在网站中,http请求是无状态的。即第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

QQ截图20180907141849.png

入口文件index.php

实例

<?php
$page_title = '我是首页';
//导入页面的公共头部
include 'public/header.php';

echo '<h2 style="color:red">我是首页</h2>';
//判断用户是否登录?
if (isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
    echo '<a href="logout.php">退出</a>';
} else {
    echo '<a href="login.php">登录</a>';
}

//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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

跳转到登入文件login.php(判断)+login_page.php(登入表单)+function.php(验证表单数据)


实例

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //加载函数库
    require 'public/function.php';

    //连接数据库
    require 'public/connect.php';

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

    //检测是否验证通过
    if ($check) {
        //设置cookie
        setcookie('id',$data['id']);
        setcookie('name',$data['name']);
        //跳转
        redirect_user('loggedin.php');
    } else {
        $errors = $data;
    }

    //关闭
    mysqli_close($dbc);
}

include 'login_page.php';

运行实例 »

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

实例

<?php
//登录成功页面

//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
    require 'public/function.php';
    redirect_user();
}

$page_title = '登录成功';
//导入页面的公共头部
include 'public/header.php';

//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_COOKIE['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;



//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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

实例

<?php
/**
 * 公共函数库
 */

//用户登录成功之后的跳转
function redirect_user($page='index.php')
{
    //默认的url
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

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

    //添加上当前脚本名称
    $url .= '/'.$page;

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

//验证用户登录
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));
    }

    //到表中进行数据验证
    if (empty($errors)) {
        // 根据邮箱和密码进行验证,并返回id, name
        $sql = "SELECT `id`,`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];

    }

}

运行实例 »

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

登入成功显示内容文件loggedin.php


实例

<?php
//登录成功页面

//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
    require 'public/function.php';
    redirect_user();
}

$page_title = '登录成功';
//导入页面的公共头部
include 'public/header.php';

//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_COOKIE['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;



//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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

退出登入操作


实例

<?php
//退出登录页面

//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
    require 'public/function.php';
    redirect_user();
} else {
    //退出登录,删除cookie
    setcookie('id','',time()-3600);
    setcookie('name','',time()-3600);
}


$page_title = '退出登录';
//导入页面的公共头部
include 'public/header.php';

//heredoc
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>

<p><a href="login.php">登录</a></p>
WELCOME;

//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post