php中如何同时使用session和cookie来保存用户登录信息


Posted in PHP onJuly 05, 2013

同时使用session和cookie来保存用户登录信息
1、数据库连接配置页面:connectvars.php

<?php
//数据库的位置
define('DB_HOST', '127.0.0.1');
//用户名
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和COOKIE,同时进行页面重定向
            if(mysqli_num_rows($data)==1){
                $row = mysqli_fetch_array($data);
                $_SESSION['user_id']=$row['user_id'];
                $_SESSION['username']=$row['username'];
                setcookie('user_id',$row['user_id'],time()+(60*60*24*30));
                setcookie('username',$row['username'],time()+(60*60*24*30));
                $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>

效果图:

php中如何同时使用session和cookie来保存用户登录信息

3、登入页面:loged.php

<?php
//使用会话内存储的变量值之前必须先开启会话
session_start();
//如果会话没有被设置,查看是否设置了cookie
if(!isset($_SESSION['user_id'])){
    if(isset($_COOKIE['user_id'])&&isset($_COOKIE['username'])){
        //用cookie给session赋值
        $_SESSION['user_id']=$_COOKIE['user_id'];
        $_SESSION['username']=$_COOKIE['username'];
    }
}
//使用一个会话变量检查登录状态
if(isset($_SESSION['username'])){
    echo 'You are Logged as '.$_SESSION['username'].'<br/>';
    echo '<a href="logOut.php"> Log Out('.$_SESSION['username'].')</a>';
}
/**在已登录页面中,可以利用用户的session如$_SESSION['username']、
 * $_SESSION['user_id']对数据库进行查询,可以做好多好多事情*/
?>

效果图:
php中如何同时使用session和cookie来保存用户登录信息
4、注销session与cookie页面:logOut.php(注销后重定向到lonIn.php)
<?php
/**同时注销session和cookie的页面*/
//即使是注销时,也必须首先开始会话才能访问会话变量
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();
}
//同时将各个cookie的到期时间设为过去的某个时间,使它们由系统删除,时间以秒为单位
setcookie('user_id','',time()-3600);
setcookie('username','',time()-3600);
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>
PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
PHP 引用文件技巧
Mar 02 PHP
PHP源码之explode使用说明
Aug 05 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
PHP使用递归生成文章树
Apr 21 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 PHP
php记录代码执行时间(实现代码)
Jul 05 #PHP
如何修改和添加Apache的默认站点目录
Jul 05 #PHP
解析php类的注册与自动加载
Jul 05 #PHP
php 注册时输入信息验证器的实现详解
Jul 05 #PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 #PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 #PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 #PHP
You might like
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
javascript优先加载笔记代码
2008/09/30 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
wxPython中listbox用法实例详解
2015/06/01 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
python加载自定义词典实例
2019/12/06 Python
python有几个版本
2020/06/17 Python
python opencv肤色检测的实现示例
2020/12/21 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
企业演讲稿范文
2013/12/28 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
知识竞赛主持词
2014/03/26 职场文书
高二学生评语大全
2014/04/25 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
预备党员半年考察意见
2015/06/01 职场文书