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学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
php基础学习之变量的使用
Jun 09 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
处理单名多值表单的详解
Jun 08 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP中的Streams详细介绍
Nov 12 PHP
一个完整的php文件上传类实例讲解
Oct 27 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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使用多个进程同时控制文件读写示例
2014/02/28 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
Use Word to Search for Files
2007/06/15 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
浅析python内置模块collections
2019/11/15 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
python热力图实现简单方法
2021/01/29 Python
python爬取youtube视频的示例代码
2021/03/03 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
市三好学生主要事迹
2014/01/28 职场文书
委托函范文
2015/01/29 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Python绘制散乱的点构成的图的方法
2022/04/21 Python