今天主要学习了cookie与session的用户登录案例,以下是相关的代码与大家分享:
cookie的代码
index代码:
实例
<?php $page_title = '首页'; //导入头部 include('inc/header.php'); echo '<h3 style="color:skyblue">用户登录页</h3>'; 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');
运行实例 »
点击 "运行实例" 按钮查看在线实例
header代码:
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> <?php echo isset($page_title) ? $page_title:'默认标题'; ?> </title> </head> <body> <h3>导航栏:<a href="http://www.jobing.com/20180420/index.php">首页</a></h3>
运行实例 »
点击 "运行实例" 按钮查看在线实例
footer代码:
login_page代码:
实例
<?php /*用户登录页面*/ $page_title='用户登录'; include('inc/header.php'); ?> <h3 style="color: skyblue">用户登录</h3> <form action="login.php" method="post"> <p> <label for="email">邮箱:</label> <input type="email" name="email" id="email" value=""> </p> <p> <label for="password">密码:</label> <input type="password" name="password" id="password" value=""> </p> <p> <button type="submit" name="submit" id="submit">登录</button> </p> </form> <?php include('inc/footer.php'); ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
login代码:
实例
<?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){ setcookie('user_id',$data['user_id']); setcookie('user_name',$data['user_name']); // 跳转 redirect_user('20180420/loggedin.php'); }else{ $errors = $data; } mysqli_close($dbc); } include('login_page.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
function代码:
实例
<?php function redirect_user($page='index.php') { // 默认地址 $url='http://'.$_SERVER['HTTP_HOST'].dirname($SERVER['PHP_SELF']); $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与用户名 $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]; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
connect代码:
实例
<?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); //设置客户端默认字符编码集
运行实例 »
点击 "运行实例" 按钮查看在线实例
loggedin代码:
实例
<?php // 未登录 if(!isset($_COOKIE['user_id'])){ require('inc/function.php'); redirect_user(); } // 已登录 $page_title = '已经登录'; // 导入头部 include('inc/header.php'); echo <<< "WELCOME" <h3 style="color:blue">登陆成功</h3> <p>欢迎您: {$_COOKIE['user_name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; //导入底部 include('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
logout代码:
实例
<?php if(!isset($_COOKIE['user_id'])){ require('inc/function.php'); redirect_user(); }else{ setcookie('user_id','',time()-3600); setcookie('user_name','',time()-3600); } // 退出登录 $page_title = '退出登录'; // 导入头部 include('inc/header.php'); echo <<< "WELCOME" <h3 style="color:blue">退出成功</h3> <p><a href="login.php">登录</a></p> WELCOME; //导入底部 include('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
session的代码
index代码:
实例
<?php session_start(); $page_title = '首页'; //导入头部 include('inc/header.php'); echo '<h3 style="color:skyblue">用户登录页</h3>'; if ((isset($_SESSION['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 session_start(); // 未登录 if(!isset($_SESSION['user_id'])){ require('inc/function.php'); redirect_user(); } // 已登录 $page_title = '已经登录'; // 导入头部 include('inc/header.php'); echo <<< "WELCOME" <h3 style="color:blue">登陆成功</h3> <p>欢迎您: {$_SESSION['user_name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; //导入底部 include('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
login代码:
实例
<?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){ // setcookie('user_id',$data['user_id']); // setcookie('user_name',$data['user_name']); $_SESSION['user_id']= $data['user_id']; $_SESSION['user_name']= $data['user_name']; // 跳转 redirect_user('20180420-1/loggedin.php'); }else{ $errors = $data; } mysqli_close($dbc); } include('login_page.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
loginout代码:
实例
<?php session_start(); if(!isset($_SESSION['user_id'])){ require('inc/function.php'); redirect_user(); }else{ // setcookie('user_id','',time()-3600); // setcookie('user_name','',time()-3600); $_SESSION=[]; session_destroy(); setcookie('PHPSESSID','',time()-3600); } // 退出登录 $page_title = '退出登录'; // 导入头部 include('inc/header.php'); echo <<< "WELCOME" <h3 style="color:blue">退出成功</h3> <p><a href="login.php">登录</a></p> WELCOME; //导入底部 include('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
其他的与cookie相同
效果图:
总结:
大体的思路是
1先创建首页,由于每个页面都有公共的头部和底部,将共同的头部和底部分离,之后进行复用
2创建用户的登录页面,创建登录验证文件,验证邮箱和密码
3.创建功能函数,创建用户页面的跳转函数,创建与数据库连接的函数,创建验证数据
4.创建登录成功的页面,验证通过之后页面进行跳转
5.创建退出登录的页面,点击退出之后页面进行跳转
使用session代替cookie,需要更改和登录相关的4个文件,分别是index.php、login.php、loggedin.php、logout.php