批改状态:未批改
老师批语:
php利用cookie和session 实现用户登录.使用session要在开始加session_start()
inc/connect.php
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_NAME', 'user');
define('DB_CHAR', 'utf8');
$dbc=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
if (mysqli_connect_errno($dbc)) {
echo "connect failed".mysqli_connect_errno;
}
mysqli_select_db($dbc,DB_NAME);
mysqli_set_charset($dbc,DB_CHAR);点击 "运行实例" 按钮查看在线实例
inc/header.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> <?php echo isset($page_title)? $page_title:'default title'; ?> </title> </head> <body> <h3>公共头部</h3>
点击 "运行实例" 按钮查看在线实例
inc/footer.php
inc/function.php
<?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($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 `php` WHERE `email`='$e' AND `password`='$p'";
$res=mysqli_query($dbc,$sql);
echo mysqli_error($dbc);
if (mysqli_num_rows($res) == 1) {
$row=mysqli_fetch_array($res,MYSQLI_ASSOC);
return [true,$row];
} else {
$errors[]='邮箱密码不正确';
}
}
return [false,$errors];
}点击 "运行实例" 按钮查看在线实例
index.php
<?php
$page_title='首页';
include('inc/header.php');
echo '<h2 style="color:red">我是首页</h2>';
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');点击 "运行实例" 按钮查看在线实例
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) {
setcookie('user_id',$data['user_id']);
setcookie('user_name',$data['user_name']);
redirect_user('loginedin.php');
} else {
$errors=$data;
}
mysqli_close($dbc);
}
include('login_page.php');点击 "运行实例" 按钮查看在线实例
login_page.php
<?php
$page_title='用户登录';
include('inc/header.php');
// error msg
if (isset($errors) && !empty($errors)) {
$errors_msg='<p style="color:red">';
foreach ($errors as $msg) {
$errors_msg.=$msg.'<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']:'' ?>">
</p>
<p>
<label for="password">密码:</label>
<input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>">
</p>
<p><button type="submit" name="submit" id="submit">登录</button></p>
</form>
<?php include ('inc/footer.php'); ?>点击 "运行实例" 按钮查看在线实例
loginedin.php
<?php
if (!isset($_COOKIE['user_id'])) {
require('inc/function.php');
echo $_COOKIE['user_id'];
redirect_user();
}
$page_title='已经登录';
include ('inc/header.php');
echo <<<"WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎你:{$_COOKIE['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
include ('inc/footer.php');点击 "运行实例" 按钮查看在线实例
logout.php
<?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"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
include ('inc/footer.php');点击 "运行实例" 按钮查看在线实例
-----------------------
session
index.php
<?php
session_start();
$page_title='首页';
include('inc/header.php');
echo '<h2 style="color:red">我是首页</h2>';
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');点击 "运行实例" 按钮查看在线实例
login.php
<?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) {
$_SESSION['user_id']=$data['user_id'];
$_SESSION['user_name']=$data['user_name'];
redirect_user('loginedin.php');
} else {
$errors=$data;
}
mysqli_close($dbc);
}
include('login_page.php');点击 "运行实例" 按钮查看在线实例
loginedin.php
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
require('inc/function.php');
echo $_SESSION['user_id'];
// redirect_user();
}
$page_title='已经登录';
include ('inc/header.php');
echo <<<"WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎你:{$_SESSION['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
include ('inc/footer.php');点击 "运行实例" 按钮查看在线实例
logout.php
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
require ('inc/function.php');
redirect_user();
} else {
$_SESSION=[];
session_destroy();
setcookie('PHPSESSID','',time()-3600);
}
$page_title='退出登录';
include('inc/header.php');
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
include ('inc/footer.php');点击 "运行实例" 按钮查看在线实例

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号