PHP基础语法之COOKIE

创建和获取简单的COOKIE

<?php
/* Cookie的创建 */

header("Content-Type: text/plain; charset=utf-8");
setcookie("name","Tom");//向浏览器输出一个cookie,在此之前不能进行任何内容输出,这样会导致cookie设置无效,这和header函数需要在内容输出前调用一样

echo "打印\$_COOKIE数组:\n";
print_r($_COOKIE);//说有COOKIE信息存储在$_COOKIE数组中
//可以发现,第一次$_cookie的值为空,但是第二次就有一个值

Cookie数组的高级创建

<?php
/* Cookie的高级创建 */
header("Content-Type: text/plain; charset=utf-8");

setcookie("timeout","30秒",time()+30,"/");//我就不详细列出更多参数了,前面两个分别是COOKIE名字和COOKIE的值,
    //time()+30表示当前时间后30秒到期,之后COOKIE自动失效,
    //之后的"/"是路径,如果当前php访问文件路径是php/05cookie2.php,那么COOKIE只会在php目录下有效,如果使用"/"就整个网站都有效
    //可以刷新这个页面几次,打印出该值后,再访问之前的文件,看看会有什么,等30后COOKIE还在么?

setcookie("list[city]","china");
setcookie("list[language]","chinese");//浏览一下,是否发现了神奇的数组

setcookie("message[]","msg1");//这样呢?试试,会发现被覆盖了吧,因此必须指明键名才行
setcookie("message[]","msg2");

echo "打印\$_COOKIE:\n";
print_r($_COOKIE);//如果你访问了上一个页面并且没有关闭浏览器,你会发现,刚才的COOKIE还在,试试关闭浏览器在打开会怎样

Cookie的简单删除

<?php
/* COOKIE的删除 */
setcookie("list",NULL);//删除要做的就是将名字对应的值置空,置空表示使用NULL,null,false,""效果都是一样
setcookie("message[]",NULL);//比较一下这两个哪个有效,会发现前一个是无效的,因为对应的删除必须和设置时是一样的
setcookie("timeout",NULL);//如果要立即删除timeout的这个,访问05cookie02.php,再访问....01.php,确认该cookie还有效,然后访问该页面跳转过去后,还在吗??
header("Location: 05cookie01.php");//该内容的含义表示发送cookie后将当前页面地址设置为05cookie01.php,相当于进行页面跳转

cookie跟踪用户

<?php
/* cookie跟踪用户 */
date_default_timezone_set("PRC");//设置时区
header("Content-Type: text/html; charset=utf-8");
if(isset($_GET['clear']))
    clear_log();
else
    make_log();//生成记录
?>
<html>
<head>
    <title>Cookie记录用户访问</title>
</head>
<body>
<p><a href="?clear">清除访问记录</a> <a href="05cookie04.php">刷新</a></p>
<?php
if(isset($_COOKIE['history_count']))
    echo "<p>这是你第“".($_COOKIE['history_count']+1)."”次访问该页面!</p>";
else
    echo "<p>这是你第一次访问,程序将自动为你生成访问记录</p>";

if(isset($_COOKIE['history']) && is_array($_COOKIE['history'])){
    echo "<p>当前共记录了你“".count($_COOKIE['history'])."”访问该页面的记录。</p>";
?>
<table border="1"  style="border-collapse:collapse;"><!--border-collapse:collapse;表示合并表格边框-->
    <tr><th>序号</th><th>时间</th><th>访问页面</th></tr>
<?php
    $i = 0;
    foreach($_COOKIE['history'] as $time => $page){
        $datetime = date("Y-m-d H:i:s",$time);
        echo "<tr><td>",++$i,"</td><td>$datetime</td><td>$page</td></tr>\n";
    }
?>
</table>
<?php
}
?>
</body>
</html>
<?php
function make_log(){
    //生成cookie的内容,发送到浏览器,注意:浏览器cookie的大小是有限制的
    $query = $_SERVER['REQUEST_URI'];
    $count = 1;
    if(isset($_COOKIE['history_count'])){
        $count += $_COOKIE['history_count'];
    }
    setcookie("history_count",$count,time()+3600*24);//记录24小时
    setcookie("history[".time()."]",$query,time()+3600*24);//24小时候后部分记录会失效,但访问总量只有没超过24小时会一直记录
    //此处记录设置的是秒级的,如果一秒钟访问了两次,此时将不会体现出来,因此,可能会出现访问次数与记录不相符的情况
}
function clear_log(){
    if(isset($_COOKIE['history'])){
        if(is_array($_COOKIE['history'])){
            foreach($_COOKIE['history'] as $name => $value){
                setcookie("history[$name]",NULL);
            }
        }
    }
    setcookie("history_count",NULL);
    header("Location: 05cookie04.php");
}
?>

4条评论在“PHP基础语法之COOKIE”

写下你最简单的想法