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 之 没有mysql支持时的替代方案
Oct 09 PHP
PHP Ajax实现页面无刷新发表评论
Jan 02 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
php实现的CSS更新类实例
Sep 22 PHP
dedecms集成财付通支付接口
Dec 28 PHP
PHP获取数组最大值下标的方法
May 12 PHP
php实现微信发红包
Dec 05 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
laravel 时间格式转时间戳的例子
Oct 11 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+MySQL投票系统的设计和实现分享
2012/09/23 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
angularjs实现天气预报功能
2020/06/16 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Django实现自定义404,500页面教程
2017/03/26 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
工程师岗位职责
2013/11/08 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
PHP命令行与定时任务
2021/04/01 PHP
Python中time标准库的使用教程
2022/04/13 Python
Golang 链表的学习和使用
2022/04/19 Golang