当前位置:首页 > 教程 > PHP > PHP Cookies 讲解

PHP Cookies 讲解

cookie 最常见的作用就是识别用户。cookie 实际上就是网站服务器保存在客户端计算机中的一个小文件。每当客户端通过浏览器请求页面时,它同时会发送 cookie。通过 PHP 特定的函数,您能够创建并取回 cookie 的值。

PHP 创建 cookie

php 使用 setcookie() 函数 来创建cookie,其语法如下所示

1
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

参数介绍:

第一个: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连接上都有效。


PS:setcookie() 函数必须位于 html 标签之前。

PHP 设置 cookie 例子

在下面的例子中,我们将创建名为 “Name” 的 cookie,把为它赋值 “Zhidao91″。我们也规定了此 cookie 在2小时后过期:

1
2
3
4
5
6
7
8
9
<?php 
setcookie("Name", "Zhidao91", time()+7200);
?>
 
<html>
<body>
 
</body>
</html>

PS:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

PHP 如何读取 cookie 的值?

PHP 使用 $_COOKIE 变量用于取回 cookie 的值。
在下面的例子中,我们取回了名为 “Name” 的 cookie 的值,并把它显示出来:

1
2
3
4
5
6
7
<?php
// Print a cookie
echo $_COOKIE["Name"];
 
// PHP 打印所有的 cookie 的方法
print_r($_COOKIE);
?>

PHP 判断是否设置了cookie

在 PHP 中使用 isset() 函数来确鼎是否已经设置了 cookie,请看下面的例子。

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<body>
 
<?php
if (isset($_COOKIE["Name"]))
  echo "Welcome " . $_COOKIE["Name"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>
 
</body>
</html>

PHP 中怎样删除 cookie?

当删除 cookie 时,您应当使过期日期变更为过去的时间点。下面是 PHP 删除 Cookie 的例子:

1
2
3
4
<?php 
// 把 cookie 的过期时间设为2小时前
setcookie("Name", "", time()-7200);
?>

浏览器不支持 cookie 的解决办法?

对于浏览器不支持cookie,就需要使用 POST 方法,将数据从一个表单页面传到另外一个页面,在以前的教程中我们已经介绍过,请参考PHP $_POST 讲解

  • << 怎样使用 PHP 上传文件?
  • PHP Session 讲解 >>
  • 作者:
    除非注明,本文原创:知道91,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.zhidao91.com/php-cookies/

    相关文章 近期热评 最新文章

    • PHP Array 简介
      知道91 | PHP Array 简介:创建数组、把一个数组分割为新的数组块、通过合并两个数组来创建一个新数组、返回两个数组的差集数组、检查数组中是否存在指定的值。
    • PHP 简介
      知道91 - PHP 文件可包含文本、HTML 标签以及脚本。PHP 文件中的脚本可在服务器上执行。这和JSP或者ASP有些类似,就是逻辑的地方使用PHP的语法,以此来构造一个完整的HT...
    • PHP 字符串
      知道91 - PHP字符串详解,介绍几个在 PHP 中用于操作字符串的最常用的函数和运算符。
    • PHP 语法基础知识
      知道91 - PHP基本语法的讲解,介绍了PHP的服务器解释原理、PHP的基本语法标记以及PHP的注释介绍。
    • PHP If Else 语句讲解
      知道91 - if..else 语句是php的最常用的逻辑控制结构语句,本文介绍了php if...else 语句的使用方法,以及实例讲解。
    • PHP Switch 语句讲解
      知道91 | Switch语句也是面向对象编程语句中最长常见的逻辑控制语句了。Switch 语句用于执行基于多个不同条件的不同动作 - 即当条件不同的时候,执行不同的逻辑操作 - P...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • ABP开发指南系列教程(2) – 多层架构...
      为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层: 展现层(...
    • ABP开发指南系列教程(1) – 入...
      ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WE...
    • Windows下 JIRA + Agile + Mysql 破解...
      本文讲述了Windows下 JIRA + Agile + Mysql 破解安装示例教程
    • c#类的构造函数继承关系示例剖析
      本文通过示例代码讲解了c#子类的构造函数与父类的关系,子类怎样集成父类的构造函数的。