博客列表 >cookie实现用户登录与验证+session实现用户登录与验证+cookie与session会话机制的优缺点分析

cookie实现用户登录与验证+session实现用户登录与验证+cookie与session会话机制的优缺点分析

Belifforz的博客
Belifforz的博客原创
2018年09月03日 17:31:27556浏览
  1. cookie实现用户登录与验证

实例

<?php
//连接数据库

$conn=mysqli_connect('127.0.0.1','root','root','php');

if(mysqli_connect_errno()){
    die('连接失败:'.mysqli_connect_error());
}

运行实例 »

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

实例

<!doctype html>
<html lang="zh-Hans">
<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
/**
 * 公共函数库
 */

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

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

    //添加上当前脚本名称

    $url.='/'.$page;

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

//验证用户登录
function check_login($conn,$email='',$password){

    //初始一个保存错误信息的数组
    $errors=[];

    //非空验证
    if(empty($email)){
        $errors[] = '邮箱不能为空';
    }else{
        $e = mysqli_real_escape_string($conn,trim($email));
    }

    //非空验证
    if(empty($password)){
        $errors[] = '邮箱不能为空';
    }else{
        $p = mysqli_real_escape_string($conn,trim($password));
    }

    //进行数据验证
    if(empty($errors)){
        //根据邮箱和密码进行验证,返回id,name

        $sql = "SELECT `id`,`name` FROM `user` WHERE `email`= '$e' AND `password` = sha1('$p')";
        //执行查询
        $res = mysqli_query($conn,$sql);
     if (mysqli_num_rows($res) == 1){
         $row = mysqli_fetch_array($res,MYSQLI_ASSOC);
         //返回查询结果
         return [true,$row];
     }else{
         $errors[] = '邮箱或密码不正确,请重新输入';
     }
        return [false,$errors];
    }
}

运行实例 »

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

实例

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

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



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

运行实例 »

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

实例

<?php
//登录成功页面

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

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

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

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

运行实例 »

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

实例

<?php

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

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

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

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

    //关闭
    mysqli_close($conn);
}

include 'login_page.php';
?>

运行实例 »

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

实例

<?php
$page_title = '用户登录';
include 'inc/header.php';

//错误信息
if(isset($errors) && !empty($errors)){
    $errors_msg = '<p style="color:red">';
    foreach($errors as $v){
        $errors_msg .= $v.'<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($_POST['email']) ? $_POST['email'] : '';?>" placeholder="请输入邮箱">
        </p>
        <p>
            <label for="password">密码:</label>
            <input type="password" name="password" id="password" value="<?php echo isset($_POST['password']) ? $_POST['password'] : '';?>" placeholder="请输入密码">
        </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();
} else {
    //退出登录,删除cookie
    setcookie('id','',time()-3600);
    setcookie('name','',time()-3600);
}


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

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

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



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

运行实例 »

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

实例

<?php
/**
 * cookie设置
 */

//1.设置cookie
setcookie('user_id','admin',time()+3600);

//2.查看cookie:超全局系统变量:$_COOKIE
print_r($_COOKIE);

//3删除cookie:把有效期设置为过期的时间
setcookie('user_id','admin',time()-3600);

运行实例 »

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


-------------------------------------------------------------------

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

   换成session的话,把上面的页面更改:  

  1. 有cookie相关的页面,要开启session_start();

  2. 把$_COOKIE['name']换成$_SESSION[''name]

  3. setcookie('name','value',time())换成 session_id['name']=value;

  4. 删除session  要2步:

删除服务器的:    session_destroy();

删除浏览器的:   setcookie('name','',time()-3600)//这里只要把时间改成过去的时间即可



3.cookie与session会话机制的优缺点分析

QQ截图20180903173103.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议