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 相关文章推荐
详解:――如何将图片储存在数据库里
Dec 05 PHP
php生成SessionID和图片校验码的思路和实现代码
Mar 10 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
PHP设计模式 注册表模式
Feb 05 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php导出excel格式数据问题
Mar 11 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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
PHP goto语句简介和使用实例
2014/03/11 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
php实现算术验证码功能
2018/12/05 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
在Python的Django框架中创建和使用模版
2015/07/15 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
python如何调用php文件中的函数详解
2020/12/29 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
大学毕业后的十年规划
2014/01/07 职场文书
矿泉水广告词
2014/03/20 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
实习指导老师意见
2015/06/04 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang