PHP中如何使用session实现保存用户登录信息


Posted in PHP onOctober 20, 2015

session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。

使用session保存页面登录信息

1、数据库连接配置页面:connectvars.php

<?php
//数据库的位置
define('DB_HOST', 'localhost');
//用户名
define('DB_USER', 'root');
//口令
define('DB_PASSWORD', '19900101');
//数据库名
define('DB_NAME','test') ;
?>

2、登录页面:logIn.php

<?php
//插入连接数据库的相关信息
require_once 'connectvars.php';
//开启一个会话
session_start();
$error_msg = "";
//如果用户未登录,即未设置$_SESSION['user_id']时,执行以下代码
if(!isset($_SESSION['user_id'])){
  if(isset($_POST['submit'])){//用户提交登录表单时执行如下代码
    $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
    $user_username = mysqli_real_escape_string($dbc,trim($_POST['username']));
    $user_password = mysqli_real_escape_string($dbc,trim($_POST['password']));
 
    if(!empty($user_username)&&!empty($user_password)){
      //MySql中的SHA()函数用于对字符串进行单向加密
      $query = "SELECT user_id, username FROM mismatch_user WHERE username = '$user_username' AND "."password = SHA('$user_password')";
      //用用户名和密码进行查询
      $data = mysqli_query($dbc,$query);
      //若查到的记录正好为一条,则设置SESSION,同时进行页面重定向
      if(mysqli_num_rows($data)==1){
        $row = mysqli_fetch_array($data);
        $_SESSION['user_id']=$row['user_id'];
        $_SESSION['username']=$row['username'];
        $home_url = 'loged.php';
        header('Location: '.$home_url);
      }else{//若查到的记录不对,则设置错误信息
        $error_msg = 'Sorry, you must enter a valid username and password to log in.';
      }
    }else{
      $error_msg = 'Sorry, you must enter a valid username and password to log in.';
    }
  }
}else{//如果用户已经登录,则直接跳转到已经登录页面
  $home_url = 'loged.php';
  header('Location: '.$home_url);
}
?>
<html>
  <head>
    <title>Mismatch - Log In</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
    <h3>Msimatch - Log In</h3>
    <!--通过$_SESSION['user_id']进行判断,如果用户未登录,则显示登录表单,让用户输入用户名和密码-->
    <?php
    if(!isset($_SESSION['user_id'])){
      echo '<p class="error">'.$error_msg.'</p>';
    ?>
    <!-- $_SERVER['PHP_SELF']代表用户提交表单时,调用自身php文件 -->
    <form method = "post" action="<?php echo $_SERVER['PHP_SELF'];?>">
      <fieldset>
        <legend>Log In</legend>
 
        <label for="username">Username:</label>
        <!-- 如果用户已输过用户名,则回显用户名 -->
        <input type="text" id="username" name="username"
        value="<?php if(!empty($user_username)) echo $user_username; ?>" />
 
        <br/>
 
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"/>
 
      </fieldset>
      <input type="submit" value="Log In" name="submit"/>
    </form>
    <?php
    }
    ?>
  </body>
</html>

3、登入页面:loged.php

<?php
//使用会话内存储的变量值之前必须先开启会话
session_start();
//使用一个会话变量检查登录状态
if(isset($_SESSION['username'])){
  echo 'You are Logged as '.$_SESSION['username'].'<br/>';
  //点击“Log Out”,则转到logOut页面进行注销
  echo '<a href="logOut.php"> Log Out('.$_SESSION['username'].')</a>';
}
/**在已登录页面中,可以利用用户的session如$_SESSION['username']、
 * $_SESSION['user_id']对数据库进行查询,可以做好多好多事情*/
?>

4、注销session页面:logOut.php(注销后重定向到lonIn.php)

<?php
//即使是注销时,也必须首先开始会话才能访问会话变量
session_start();
//使用一个会话变量检查登录状态
if(isset($_SESSION['user_id'])){
  //要清除会话变量,将$_SESSION超级全局变量设置为一个空数组
  $_SESSION = array();
  //如果存在一个会话cookie,通过将到期时间设置为之前1个小时从而将其删除
  if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-3600);
  }
  //使用内置session_destroy()函数调用撤销会话
  session_destroy();
}
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>

好了以上代码就是本文的全部内容,代码很简单,很多地方都附有注释文字说明,有哪里不明白的地方欢迎给我留言,我会在第一时间给大家答复的。谢谢!

PHP 相关文章推荐
PHP生成静态页面详解
Nov 19 PHP
php操作mysqli(示例代码)
Oct 28 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
php常用正则函数实例小结
Dec 29 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PDO::beginTransaction讲解
Jan 27 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 #PHP
php生成动态验证码gif图片
Oct 19 #PHP
php批量删除超链接的实现方法
Oct 19 #PHP
php二维码生成
Oct 19 #PHP
部署PHP时的4个配置修改说明
Oct 19 #PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 #PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 #PHP
You might like
德生S2000电路分析
2021/03/02 无线电
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
vue组件化中slot的基本使用方法
2019/05/01 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python实现小球弹跳效果
2019/05/10 Python
django迁移数据库错误问题解决
2019/07/29 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
暑假实习求职信范文
2013/09/22 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
运动会跳远加油稿
2014/02/20 职场文书
商场父亲节活动方案
2014/08/27 职场文书
横店影视城导游词
2015/02/06 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python