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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
php session和cookie使用说明
Apr 07 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
Jul 10 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
PHP5 面向对象程序设计
2008/02/13 PHP
Cakephp 执行主要流程
2010/03/24 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
详解python中docx库的安装过程
2019/11/08 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
社区活动总结范文
2015/05/07 职场文书
小学生家长意见
2015/06/03 职场文书
发票退票证明
2015/06/24 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
nginx实现动静分离的方法示例
2021/11/07 Servers