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>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?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的话,把上面的页面更改:
有cookie相关的页面,要开启session_start();
把$_COOKIE['name']换成$_SESSION[''name]
setcookie('name','value',time())换成 session_id['name']=value;
删除session 要2步:
删除服务器的: session_destroy();
删除浏览器的: setcookie('name','',time()-3600)//这里只要把时间改成过去的时间即可
3.cookie与session会话机制的优缺点分析