setcookie()详解

php中setcookie函数用法详解:
   
    php手册中对setcookie函数讲解的不是很清楚,下面是我做的一些整理,欢迎提出意见。
   
    语法:
   
    bool setcookie(string name[,string value[,int expirel[,string path[,string domain[,int secure]]]]].
   
    参数介绍:
   
    第一个:name,必选参数,这个是cookie的变量名,可以通过$_COOKIE['user']调用变量名为user的cookie.
   
    第二:value,可选参数,这个cookie变量的值,比如说setcookie(“user”,“php”),我们通过调用$_COOKIE['user']可以得到php值;
   
    第三个:expire,可选参数,这个是用来设置cookie变量保存的时间,注意是我们设置的的UNIX时间戳减去当前的UNIX时间戳才是 cookie变量保存的时间。(UNIX时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数) ,一般我们可以通过time()函数获取当前的UNIX时间戳,再加上我们要保存的时间(单位为秒)比如说,setcookie(“user”,“php”,time()+3600),这样我们就可以保存user这个cookie变量的时间为3600秒。另外我们可以通过设置的时间戳小于当前的时间戳来删除cookie变量,比如说setcookie(“user”,“php”,time()-1)这样我们就删除了user这个cookie变量了。
   
    第四个:path,cookie的有效范围,这个参数是下一个参数domain基础上的有效范围,如果path设置为“/”,那就是在整个 domain都有效,比如setcookie(“user”,“php”,time()+3600,“/”),这样我们domain下的任何目录,任何文件都可以通过$_COOKIE['user']来调用这个cookie变量的值。如果path设置为“/test”,那么只在domain下的/test 目录及子目录才有效,比如domain下有两个目录: test1,test2,我们设置为setcookie(“user”,“php,time()+3600,”/test1“),那么只有test1目录下才能通过$_COOKIE['user']调用user这个cookie变量的值,test2目录下获取不到。
   
    第五个:domain,cookie有效的域名,如果domain,设置为phpzixue.cn,那么在phpzixue.cn下的所有子域都有效。假设phpzixue.cn有两个子域,php.phpzixue.cn,css.phpzixue.cn,我们设置为 setcookie(”user“,”php“,time()+3600,”/“,”php.phpzixue.cn“),那么只有在 php.phpzixue.cn这个子域下才能获取user这个cookie变量的值。 再举一个例子:setcookie(”user“,”php“,time()+3600,”/test“,”php.phpzixue.cn“),那么只有在php.phpzixue.cn这个子域下的test目录下才能获取user这个cookie变量的值。
   
    第六个:secure,值cookie是否仅通过安全的https,值为0或1,如果值为1,则cookie只能在https连接上有效,默认值为 0,表示cookie在http和https连接上都有效。
   
    使用cookie技术计算网站的月访问量:
   
    <?php
   
    header(”Content-type:text/html;charset=utf-8“); //选择utf-8编码
   
    if(empty($_COOKIE['counter'])) //如果cookie不存在
   
    $counter=1; //设置$counter的初始值为1;
   
    else //如果cookie存在
   
    $counter=$_COOKIE['counter']+1 ; //每刷新一次页面,将$conunter变量的值累计加1.
   
    //每刷新一次页面,cookie变量的值都重新赋予新的$counter的值,也就是不断累计加1.
   
    setcookie(‘counter',$counter,time()+2678400);//time()+2678400就是说保存2678400秒,也就是一个月。
   
    echo ”你是第 $_COOKIE[counter] 位访客!!“; //通过$_COOKIE['counter']调用cookie变量的值。
   
    ?>

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

必须在任何其他输出发送前对 cookie 进行赋值。

如果成功,则该函数返回 true,否则返回 false

在PHP中要创件cookie就需要用setcookie函数,setcookie()最多可有六个参数

setcookie函数是向客户端发送一个 HTTP cookie.

语法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()代替.

如果希望用户关闭其浏览器后,仍保留此cookie,则必须传递第三个参数给setcookie()函数,即设定此cookie的有效日期。由于 PHP的背 景完全源于Unix的思想,这个有效期限需要以从1970年1月1日起算的总秒数来代表。如果作为Unix程序员,这种算法对你而言可能是合情合理的。但 如果来自或Macintosh阵营,你可能只能摇头叹息,无法理解那些古怪的Unix家伙们。

不过无需害怕。PHP提供一个很好用的函数mktime()。你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,mktime()就会返回该日期自1970年1月1日的总秒数.

如果需要模拟 Y2K 问题:

<?php

$y2k = mktime(0,0,0,1,1,2000);

setcookie(’name’, ‘bret’, $y2k);

?>

现在,你的cookie将会在2000年失效。

如果需要更新cookie以让其储存新值,只需要将其原值覆盖即可。因此,即使你已经在之前的页面中刚刚发送cookie,仍可以将你的名字改为“jeff”。

<?php

$y2k = mktime(0,0,0,1,1,2000);

setcookie(’name’, ‘jeff’, $y2k);

?>
注意这样做并不会改变变量$name的值。在页面载入的时候,其值就已经确定。如果希望总是同时确定二者,可以编写如下:

<?php

$name = ‘jeff’;

$y2k = mktime(0,0,0,1,1,2000);

setcookie(’name’, $name, $y2k);

?>

setcookie ()的下两个参数可以控制读取cookie的程序的域及目录路径。默认设定为仅在与送出cookie的服务器相同且在同级或以下的目录结构内的页面才可以 读取其值。这是出于网络安全方面的考虑。然而,如果你有一个帐号“www.domain.com”但同时也是“other.domain.com”,且帐 户允许从~/myhome目录处理页面,则应更改setcookie()如下:

<?php

setcookie(’name’, ‘jeff’, $y2k, ‘~/myhome’, ‘.domain.com’);

?>

我们还未使用过的setcookie()最后一个参数是设定cookie只传送给实行诸如SSL的安全连接的Web服务器。要使用此功能,将第六个值设置为1。

删除cookie非常简单,仅需简单地将cookie的名传送给setcookie(),PHP就会将其删除掉。

<?php setcookie(’name’); ?>

最后还有一个关于使用cookie的重要事项。由于cookie与HTTP的特定方式,你必须在你输出任何文本前,传送出所有的cookie。否则PHP会给出警告,并且cookie也不会被传送。因此,这样做是正确的:

<?php

setcookie(’name’, ‘jeff’);

echo “Hello Everyone!”;

?>

以下是错误地:

<?php

echo “Hello Everyone!”;

setcookie(’name’, ‘jeff’);

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值