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 06 PHP
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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 代码优化之经典示例
2011/03/24 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
python使用mailbox打印电子邮件的方法
2015/04/30 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python with语句用法原理详解
2020/07/03 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
应届大学生的推荐信
2013/11/20 职场文书
大学生创业计划书的格式要求
2013/12/29 职场文书
初中学校军训方案
2014/05/09 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL