Blogger Information
Blog 38
fans 0
comment 1
visits 30388
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
独立完成cookie与session的用户登录案例
1
Original
691 people have browsed it

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];
	}
 ?>

运行实例 »

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


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
  • 1
    2018-03-16 00:39:40
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!