博客列表 >独立完成cookie与session的用户登录案例

独立完成cookie与session的用户登录案例

1
1原创
2018年05月09日 10:39:18690浏览

index.php

实例

<?php 
$page_title = '首页';

include('inc/header.php');
echo "我是首页";

// 登录检测
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');


 ?>

运行实例 »

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

3.loggedin.php用于登录成功的页面

实例

<?php 
// 处理用户没有登录的验证
if (!isset($_COOKIE['user_id'])) {
 	require('inc/function.php');
 	redirect_user();
 } 
 // 已经登录了
 $page_title = '已登录';

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


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


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

运行实例 »

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

4.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');

 ?>

运行实例 »

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

5.login_page.php:用于渲染登录页面

实例

<meta charset="utf-8">
<?php 
// 输出错误信息
// 输出登录表单

$page_title = '用户登录';

include('inc/header.php');

// 错误信息

 ?>
 <h2>用户登录</h2>
 <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">登录</button>
 	</p>
 </form>

<?php 
include('inc/footer.php');
 ?>

运行实例 »

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

6.logout.php用户退出后的页面

实例

<?php 
if (!isset($_COOKIE['user_id'])) {
 	require('inc/function.php');
 	redirect_user();
 } else{
 	setcookie('user_id','',time()-1);
 	setcookie('user_name','',time()-1);
 }
 // 已经登录了
 $page_title = '退出登录';

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


// 打印欢迎信息
echo <<< "WELCOME"
退出成功

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


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

 ?>

运行实例 »

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

以下是公共文件:

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

运行实例 »

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

2.footer.php公共尾部文件


实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>
		<?php
    		echo isset($page_title)?$page_title:'默认标题';

		?>
			
		</title>
</head>
<body>
		<h3>我是公共底部代码</h3>
</body>
</html>

运行实例 »

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

3.公共头部文件header.php


实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>
		<?php
    		echo isset($page_title)?$page_title:'默认标题';

		?>
			
		</title>
</head>
<body>
		<h3>我是公共头部代码</h3>
</body>
</html>

运行实例 »

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

4.以及最重要的公共函数库

实例

<?php 
	// 用户自定义地址
	function redirect_user($page='index.php')
	{
		// 默认地址
		// http://.主机名.{dirname(函数返回路径中的目录部分):获取当前脚本的目录名}
		$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

		// 去掉目录名的/\
		$url = rtrim($url, '/\\');

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

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

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

	/**
	 * [check_login description]
	 * @param  [type] $dbc      [description]
	 * @param  string $eamil    [description]
	 * @param  string $password [description]
	 * @return [type]           [description]
	 */
	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)) {
			$sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') ";
		 // $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,MYSQL_ASSOC);

					// echo '<pre>';
					// print_r($row);die();
					
				return [true,$row];
			}else{
				$errors[] = '邮箱或密码不正确,请重新输入';
			}
		}
		return[false,$errors];
	}
 ?>

运行实例 »

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


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