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分页函数
Jul 08 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
精美漂亮的php分页类代码
Apr 02 PHP
深入PHP magic quotes的详解
Jun 17 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
thinkPHP简单遍历数组方法分析
May 16 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
php传值方式和ajax的验证功能
Mar 27 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 PHP
laravel框架使用极光推送消息操作示例
Feb 15 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
python检测远程服务器tcp端口的方法
2015/03/14 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
使用python绘制温度变化雷达图
2019/10/18 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
应届生自我鉴定
2013/12/11 职场文书
工作分析计划书
2014/04/30 职场文书
校庆团日活动总结
2014/08/28 职场文书
个人存款证明书
2014/10/18 职场文书
领导干部考核评语
2015/01/04 职场文书
故宫导游词
2015/01/31 职场文书
营运督导岗位职责
2015/04/10 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android