php cookie使用方法学习笔记分享


Posted in PHP onNovember 07, 2013

PHP setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

必须在任何其他输出发送前对 cookie 进行赋值。如果成功,则该函数返回 true,否则返回 false。

1 setcookie(name, value, expire, path, domain, secure)
•name 必需。规定 cookie 的名称。
•value 必需。规定 cookie 的值。
•expire 可选。规定 cookie 的有效期。
•path 可选。规定 cookie 的服务器路径。
•domain 可选。规定 cookie 的域名。
•secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。如果你不需要这样,可以使用 setrawcookie() 代替。

例,php设置和获取cookie

setcookie('mycookie','value');
//函数原型:int setcookie(string name,string value,int expire,string path,string domain,int secure)
echo($mycookie);
echo($HTTP_COOKIE_VARS['mycookie']);
echo($_COOKIE['mycookie']);

删除Cookie

(1)调用只带有name参数的setcookie();
(2)使失效时间为time()或time-1;

<?php setcookie('name'); ?>
setcookie('mycookie');或setcookie('mycookie','');或setcookie("mycookie",false);
//setcookie('mycookie','',time()-3600);
echo($HTTP_COOKIE_VARS['mycookie']);
print_r($_COOKIE);

建议删除方法:

setcookie('mycookie','',time()-3600);

PHP提供一个很好用的函数mktime()。
你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,
mktime()就会返回该日期自1970年1月1日的总秒数。
因此,如果需要模拟 Y2K 问题:

$y2k = mktime(0,0,0,1,1,2000);
setcookie('name','value',$y2k);
setcookie('name', 'value', time+3600);
setcookie('name', 'value', $y2k, '~/myhome', '.domain.com');

获取COOKIE过期时间的办法

$expire = time() + 86400; // 设置24小时的有效期
setcookie ("var_name", "var_value", $expire); // 设置一个名字为var_name的cookie,并制定了有效期
setcookie ("var_name_expire", $expire, $expire); // 再将过期时间设置进cookie以便你能够知道var_name的过期时间

注:

在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。
如果你不需要这样,可以使用 setrawcookie() 代替。

例,cookie来保存用户登录信息

1、数据库连接配置页面:connectvars.php

<?php
//数据库的位置
define('DB_HOST', 'localhost');
//用户名
define('DB_USER', 'root');
//口令
define('DB_PASSWORD', '19900101');
//数据库名
define('DB_NAME','test') ;
?>

2、登录页面:logIn.php

<?php
//插入连接数据库的相关信息
require_once 'connectvars.php';
$error_msg = "";
//判断用户是否已经设置cookie,如果未设置$_COOKIE['user_id']时,执行以下代码
if(!isset($_COOKIE['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);
            //若查到的记录正好为一条,则设置COOKIE,同时进行页面重定向
            if(mysqli_num_rows($data)==1){
                $row = mysqli_fetch_array($data);
                setcookie('user_id',$row['user_id']);
                setcookie('username',$row['username']);
                $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>
        <!--通过$_COOKIE['user_id']进行判断,如果用户未登录,则显示登录表单,让用户输入用户名和密码-->
        <?php
        if(empty($_COOKIE['user_id'])){
            echo '<p class="error">'.$error_msg.'</p>';
        ?>
        <!-- $_SERVER['PHP_SELF']代表用户提交表单时,调用自身php文件 -->
        <form method = "post" action="<?php echo $_SERVER['PHP_SELF'];?>">
            <fieldset  style="width:250px;">
                <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>    
            <br/>
            <input type="submit" value="Log In" name="submit"/>
        </form>
        <?php
        }
        ?>
    </body>
</html>

3、登入页面:loged.php

<?php
//已登录页面,显示登录用户名
if(isset($_COOKIE['username'])){
    echo 'You are Logged as '.$_COOKIE['username'].'<br/>';
    //点击“Log Out”,则转到logOut.php页面进行cookie的注销
    echo '<a href="logOut.php"> Log Out('.$_COOKIE['username'].')</a>';
}
/**在已登录页面中,可以利用用户的cookie如$_COOKIE['username']、
 * $_COOKIE['user_id']对数据库进行查询,可以做好多好多事情*/
?>

4、注销cookie页面:logOut.php(注销后重定向到lonIn.php)

<?php
/**cookies注销页面*/
if(isset($_COOKIE['user_id'])){
    //将各个cookie的到期时间设为过去的某个时间,使它们由系统删除,时间以秒为单位
    setcookie('user_id','',time()-3600);
    setcookie('username','',time()-3600);
}
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>

最后总结三点,大家必须留意

1: 设置cookie时的注意事项

在同一个页面中设置cookie,实际上是按从后往前的顺序进行的.如果要先删除一个cookie,再写入一个cookie,则必须先写写入语句,再写删除语句.否则会出现错误.

2: setcookie举例

简单的: setcookie("mycookie","value_of_mycookie");
带失效时间的: setcookie("withExpire","Expire_in_1_hour",time()+3600);
什么都有的:setcookie("FullCookie","Full_cookie_value",time+3600,"/forum","3water.com",1);

3: cookie的一些特点

cookie是面向路径的.缺省path属性时,WEB服务器页会自动传递当前路径给浏览器.指定路径会强制服务器使用设置的路径.
在一个目录页面里设的cookie在另一个目录的页面里是看不到的.

PHP 相关文章推荐
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
基于PHP array数组的教程详解
Jun 05 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
php安全配置记录和常见错误梳理(总结)
Mar 28 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 #PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 #PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 #PHP
php去除HTML标签实例
Nov 06 #PHP
php实现监听事件
Nov 06 #PHP
php生成扇形比例图实例
Nov 06 #PHP
php多用户读写文件冲突的解决办法
Nov 06 #PHP
You might like
德生H-501的评价与改造
2021/03/02 无线电
深入浅出php socket编程
2015/05/13 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
js实现随机8位验证码
2020/07/24 Javascript
详解vue路由
2020/08/05 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
python动态参数用法实例分析
2015/05/25 Python
python中函数传参详解
2016/07/03 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python发展简史 Python来历
2019/05/14 Python
Python列表与元组的异同详解
2019/07/02 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python实现程序重启和系统重启方式
2020/04/16 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
python中if嵌套命令实例讲解
2021/02/25 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
建筑工程毕业生自我鉴定
2014/01/14 职场文书
法律进学校实施方案
2014/03/15 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
销售经理岗位职责
2015/01/31 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python