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 相关文章推荐
ADODB类使用
Nov 25 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
PHP常用正则表达式集锦
Aug 17 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
php实现倒计时效果
Dec 19 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
PHP自定义错误用法示例
Sep 28 PHP
详解php中的implements 使用
Jun 13 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 PHP
laravel入门知识点整理
Sep 15 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
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
javascript脚本调试方法小结
2008/11/24 Javascript
js 对象是否存在判断
2009/07/15 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
python中List的sort方法指南
2014/09/01 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
python 判断网络连通的实现方法
2018/04/22 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python实现文字版扫雷
2020/04/24 Python
护理实习自我鉴定
2013/12/14 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
幼师求职信
2014/06/23 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
呐喊读书笔记
2015/06/30 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python