澳门新浦京娱乐游戏PHP cookie使用方法与注意事项

小结
通过以上三步,我们使用PHP快速地在单一页面上实现了表单显示和表单处理的功能。
设定Cookies
PHP提供了强大的设定和读取Cookies的功能。在此,我们不想对Cookies进行过多的介绍,但是用户应当认识到在设计WEB应用的过程中Cookies可能起到的重要作用。
用户可以使用PHP提供的setcookie()函数创建或修改Cookie。setcookie()函数总共包括6个参数,能够对cookie进行精确的控制。
使用setcookie()函数设定cookie的最简单的方式为: setcookie(‘name’,
‘PETER’);
这样,在用户访问整个站点页面的期间,PHP将会自动创建一个名为$name的变量,并将值PETER赋予该变量。我们把这种Cookie称做会话Cookie,即其作用域为用户的整个会话过程。
如果我们希望Cookie值在访问用户离开站点后仍然有效的话,可以使用setcookie()函数的相应参数,设定Cookie的有效期。这里,我们需要对PHP的时间设定进行一下说明。PHP是一种基于Unix开发出的技术,用户需要用自1970年1月1日之后的秒数表示当前时间。对于没有任何Unix系统编程经验的广大普通用户来说真是有点摸不着头脑。不过,大家大可不必担心,因为PHP为我们提供了一个非常简便的解决方式,即mktime()函数。用户可以在mktime()函数中按照小时、分、秒、月、日、年的顺序输入用户希望表示的时间,mktime()函数将会返回该时间距离1970年1月1日的秒数。举例来说,如果我们希望设定一个有效期持续到2000年的Cookie的话,可以使用如下方式:
?php $y2k = mktime(0,0,0,1,1,2000); setcookie(‘name’, ‘PETER’, $y2k);

如果用户希望更新已经存在的cookie,可以采用简单的直接覆盖原值的方法。例如,即使我们已经按照上述代码对cookie进行了设定,仍可以对其做以下改动:
?php $y2k = mktime(0,0,0,1,1,2000); setcookie(‘name’, ‘JEFF’, $y2k); ?
这里需要提醒用户注意的一点是,虽然我们对cookie值进行了修改,但是在没有加载经过修改的页面之前,PHP中$name变量的值仍然不会改变。如果用户希望在更改cookie值的同时更改
相应PHP变量的值,可以采用以下方式: ?php $name = ‘JEFF’; $y2k =
mktime(0,0,0,1,1,2000); setcookie(‘name’, $name, $y2k); ?
在有效期参数之后,setcookie()函数提供了设置可以读取cookie值的页面的路径和域的参数。出于安全因素的考虑,在默认情况下,只有与设定cookie的页面处于同一目录或下属子目录的页面才能够读取相应cookie值。但是,根据需要,我们也可以对这一设定进行修改。例如:
?php setcookie(‘name’, ‘jeff’, $y2k, ‘~/myhome’, ‘.domain.com’); ?
通过上述代码,我们设定凡是位于~/myhome目录下,属于.domain.com域的页面都能够读取该cookie值。
setcookie()函数的最后一个参数较少被使用。该参数可以指定只向运行安全连接协议,如SSL,的WEB服务器返回cookie值。如果用户希望启动该参数功能,只需要将其值设为1即可。
使用PHP删除cookie也非常简便,用户只需要在setcookie()函数中输入希望删除的cookie的名称,PHP就会自瓿伤械纳境ぷ鳌@纾?
?php setcookie(‘name’); ?
最后,关于cookie还要说明一点。考虑到HTTP协议中cookie的运作方式,用户一定要注意应当在显示任何文字之前发送所有的cookie设置。如果用户在编写代码时先设定显示的文字然后再发送cookie的话,PHP就会弹出报错信息,无法完成cookie的设置。举例来说:
?php setcookie(‘name’, ‘jeff’); echo “Hello Everyone!”; ?
这种cookie设置的方式是正确的。但是如果采用如下方式: ?php echo “Hello
Everyone!”; setcookie(‘name’, ‘jeff’); ?
则会出现报错信息,无法完成cookie的设置。日期和时
PHP提供了多种简便的功能以方便用户显示和控制日期和时间。如果用户希望以某种形式显示某一日期或时间的话,可以使用PHP提供的date()函数。date().函数包括两个参数,分别用于设定日期的显示格式以及代表显示日期的时间戳,其中,时间戳必须采用距离1970年1月1日的秒数方式表示。如同C语言中的strftime()函数或Perl中的POSIX::strftime()函数,PHP中的date()函数具有非常多的格式设置选项,这里就不一一说明了。举例来说,date()函数的使用方式如下:
?php $birthday_stamp = mktime(10,10,0,10,20,1975); $birthday_formatted
= date(‘F d, Y – g:i a’,$birthday_stamp); echo “Peter was born on
$birthday_formatted.” ? 显示结果为:Peter was born on October 10,
1975–10:10 p.m. 总结
PHP是一种快速创建动态WEB站点的强大工具,其熟悉的语法风格和源代码开放的特性能够使使用者在最短的时间内了解和掌握其功能并进而发挥出其巨大潜力。希望本文能够对广大读者有所启发。祝大家早日成为PHP高手。

用PHP来设置并读取cookie是一件极其——我们敢说吗?——简单的事情。我们并不希望大力鼓吹cookie,不过它们的确既重要又实用。它们是解决某些问题时唯一适用的工具。

PHP cookie用法

要创建并修改一个
cookie,可使用PHP函数setcookie()。取决于想对cookie进行控制的程度,及谁可以读取cookie的值,setcookie()最多可有六个参数。

 代码如下

设置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’]);

然后,在用户退出前,接下来使用此浏览器查看的站点中每一个页面,都会有一个值为“bret”的变量$name,并且很容易通过PHP
对其进行访问。由于其生存期是一次用户连结,此类cookie被称为session
cookie。

删除Cookie

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

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

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

 代码如下

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

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

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

setcookie(‘mycookie’);或setcookie(‘mycookie’,”);或setcookie(“mycookie”,false);
//setcookie(‘mycookie’,”,time()-3600);
echo($HTTP_COOKIE_VARS[‘mycookie’]);
print_r($_COOKIE);

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

建议删除方法:

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

 代码如下

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

setcookie(‘mycookie’,”,time()-3600);

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

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

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

因此,如果需要模拟 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() 代替。

PHP设置、获取与删除COOKIE

 

 代码如下

//——–设置COOKIE,1小时后过期——//
setcookie(‘TestCookie’,’hello word
秦迷’,time()+3600);
//setrawcookie不进行URL编码
header(‘Content-type: text/html’);
 

//查看发送的报头
var_dump(headers_list());#array(2) { [0]=> string(85)
“Set-Cookie: TestCookie=hello+word+%C7%D8%C3%D4; expires=Tue,
19-Apr-2011 10:06:14 GMT” [1]=> string(23) “Content-type:
text/html” }
echo ‘<br>’;
echo $_COOKIE[‘TestCookie’];#hello word 秦迷
//兼容旧版本(淘汰)
if(isset($HTTP_COOKIE_VARS[“TestCookie”])){
    echo $HTTP_COOKIE_VARS[“TestCookie”];
}
 

echo ‘<br>’;
//输出所有 cookie
print_r($_COOKIE);#Array ( [key] => value [TestCookie] =>
hello word 秦迷 )
?>
 

<script
type=”text/javascript”>
<!–
alert(document.cookie);
//–>
</script>
 

 

<?php
//—–设置数组COOKIE——-//
setcookie(“cookie[one]”,”oneVal”,time()+3600);
setcookie(“cookie[two]”,”twoVal”,time()+3600);
 

echo ‘<br>’;
echo $_COOKIE[‘cookie’][‘two’];#twoVal
echo ‘<br>’;
 

//输出 cookie (在重载页面后)
if (isset($_COOKIE[“cookie”]))
{
    foreach
($_COOKIE[“cookie”] as $name => $value)
    {
       echo “$name : $value <br>”;
       /**
        * two : twoVal
        * one : oneVal
        */
 

    }
}
 

 

//设置过期,删除COOKIE
//setcookie(‘TestCookie’, ”, time() – 3600);
//setcookie(‘cookie[one]’, ”, time() – 3600);

方法一:

在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在<html>标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出

由于上面的限制,在使用setcookie()函数时,学会遇到 “Undefined
index”、”Cannot modify header information – headers already sent
by”…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数
ob_start();

ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

方法二:

解决Warning: Cannot modify header information – headers already sent by
……

前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header
information – headers already sent by
….今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上ob_start();,结果失败。后来打开
php.ini 然后把 output_buffering 设为 on
。重起appache,OK。看来这才是解决办法。

特别注意:如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。切记,切记,切记!(这问题害我折腾了半天。)

方法三:

当前设置的Cookie
不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里
Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原
因。在同一个页面设置Cookie,实际是从后往前,所以如果要在插入一个新的Cookie之前删掉一个,你必须
先写插入的语句,再写删除的语句,否则可能会出现不希望的结果。

删除一个COOKIE时,该COOKIE的值在当前页面仍然是有效的,也就是值还是存在的,在下次请求该页面或其它页面时就不会存在了。也就是说PHP的COOKIE相关操作都是异步的,当前面设置或删除了COOKIE,要等到下次请求时才能正确反应出来。

删除COOKIE时最好不要用setcookie(cookie名)这种方法,这样很容易删除整个COOKIE数组,具体我不细说了,注意就行了,删除COOKIE的最好方法是设有效时间为过去,当浏览器发现COOKIE有效期过后会确发删除COOKIE事件,还有一点要注意的时,设置COOKIE时有几个参数,删除时也要有几个参数,否则容易出错。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图