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+Html+缓存
Dec 20 PHP
一段php加密解密的代码
Jul 16 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
php 生成短网址原理及代码
Jan 23 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
php身份证号码检查类实例
Jun 18 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP中include和require的区别实例分析
May 07 PHP
php文件上传类的分享
Jul 06 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 空格,换行,跳格使用说明
2009/12/18 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php分页函数完整实例代码
2014/09/22 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
python通过函数属性实现全局变量的方法
2015/05/16 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Django URL参数Template反向解析
2020/11/24 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
大学学年自我鉴定
2013/10/28 职场文书
高级工程师岗位职责
2013/12/15 职场文书
教师求职信范文
2014/05/24 职场文书
应届大专生求职信
2014/06/26 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
四大名著读书笔记
2015/06/25 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
团委副书记工作总结
2015/08/14 职场文书
800字作文之大雪
2019/12/04 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android