Cookie是网站常用的一种存储数据的方式,Cookie虽然是保存在用户的浏览器端,但发送HTTP请求的时候也会一起传到服务器,所以后端也能很方便的操作Cookie,而且使用PHP操作Cookie要比Javascript方便。

Session也是一种存储数据的方式,不过Session的数据是存储在服务端,浏览器端只是存储一个Session的ID,关闭浏览器后Session也会被销毁,有点类似于浏览器端的sessionStorage。Session常用来存储用户的登录状态和购物车等。

操作Cookie

添加Cookie

添加Cookie可以使用 setcookie 函数,下面存储一个名为 username 的Cookie:

<?php

//  添加一个名为username的Cookie
setcookie('username', '123456', time() + 3600);

上面存储了一个名为username的Cookie,其中的 username 就是Cookie的名称,123456 就是要存储的Cookie值,time() + 3600 就是Cookie的过期时间,time() 是获取当前的Unix时间戳,后面的 + 3600 就是在当前时间戳上 + 3600秒,也就是一个小时后过期。下面是 setcookie 函数的详细参数说明:

参数类型说明
namestringCookie名称。
valuestringCookie值。
expireintCookie的过期时间,使用UNIX时间戳。
pathstringCookie 有效的服务器路径。 设置成 '/' 时,Cookie 对整个域名 domain 有效。 如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。
domainstring域名,如果设置为主域名 主域名和二级域名都有效,如果设置为二级域名只有设置的域名和旗下的域名有效。
securebool只有HTTPS连接才发送Cookie,默认为 false。
httponlyboolCookie只能通过HTTP协议访问,也就是无法通过Javascript访问,默认为false。

访问Cookie

要获取Cookie可以访问 $_COOKIE 全局数组,下面输出保存的username:

<?php

//  输出username的Cookie
echo $_COOKIE['username'];

修改Cookie

修改Cookie只需要重新添加一个重名的Cookie覆盖之前的Cookie即可,例如我存储了一个username=123456的Cookie,我想把Cookie值改为abc:

<?php

//  把username的Cookie值改为abc
setcookie('username', 'abc', time() * 3600);

删除Cookie

删除Cookie也很简单,重新添加一个同名的Cookie,把过期时间设置为比当前更早的时间,下面删除username的Cookie:

<?php

//  把username的Cookie值改为abc
setcookie('username', '', time() - 1);

这里把过期时间设置为了当前时间 - 1秒。

操作Session

添加Session

添加Session可以直接给 $_SESSION 全局变量添加内容,不过在使用Session前还需要先启动Session,启动Session的函数是 session_start() ,下面添加一个名为 username 的Session:

<?php

//  启动session
session_start();
//  存储username
$_SESSION['username'] = '123';

在操作 $_SESSION 之前都需要启动Session。

访问Session

访问Session也是直接访问 $_SESSION ,如下:

<?php

//  启动session
session_start();
//  输出username
echo $_SESSION['username'];

修改和删除Session

修改也是一样的修改 $_SESSION ,因为比较简单,所以就不掩饰了。

删除也只需要删除 $_SESSION 即可,如下:

<?php

//  启动session
session_start();
//  删除username
unset($_SESSION['username']);

如果要释放所有Session变量可以使用 session_unset()

其他Session相关

注意!如果一个页面或关联的几个页面出现多次 $_SESSION 也只需要启动一次Session,如果要判断session是否启动可以使用 isset() 函数来判断 $_SESSION 是否存在,如下:

<?php

//  判断Session是否启动
if (!isset($_SESSION)) {
    //  如果未启动就启动session
    session_start();
}

或者也可以使用 session_status() 函数来判断Session是否启动,启动会返回 2 ,未启动会返回 1 ,如下:

<?php

//  判断Session状态
if (session_status() == 1) {
    //  启动Session
    session_start();
}

以上就是PHP比较简单的操作Cookie和Session,更复杂的会话管理以后再写。