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 相关文章推荐
apache rewrite_module模块使用教程
Jan 10 PHP
精通php的十大要点(上)
Feb 04 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
PHP中的事务使用实例
May 26 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
基于vue.js组件实现分页效果
2018/12/29 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
python 判断自定义对象类型
2009/03/21 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
市场开发与营销专业求职信
2013/12/31 职场文书
土地租赁协议书
2015/01/29 职场文书
2016春节家属慰问信
2015/03/25 职场文书
大学感恩节活动总结
2015/05/05 职场文书
大学生党课心得体会
2016/01/07 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Javascript 解构赋值详情
2021/11/17 Javascript