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 20 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 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
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
理解javascript async的用法
2017/08/22 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
深入理解Python中装饰器的用法
2016/06/28 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
Python打印不合法的文件名
2020/07/31 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
J2EE面试题
2016/03/14 面试题
初二学习计划书范文
2014/04/27 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技