1、概述
Cookie和会话控制是PHP编程的重要内容,有效使用Cookie和会话控制,可以轻松完成很多复杂任务。
Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在客户机上的小文本文件,它可以包含有关用户的信息(如身份识别号码、密码、用户在Web站点购物的方式等)。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。
通过会话控制可以轻松地完成很多任务,例如在网站上某一个页面中的变量(指服务器端变量)是不能在下一页中使用的,但通过Session可以解决上述问题,Session中注册的变量可以作为全局变量使用,这样就可以将Session用于用户身份认证,记录程序状态、页面之间参数传递及电子商务网站中制作购物车等。
2、设置Cookie
setCookie
在PHP中通过setcookie()函数设置Cookie, setcookie()函数的语法格式如下:
bool setcookie(string name[,string value[,int expire[,string path[,string domain[,int secure]]]]]);
参数说明如下:
在PHP中通过$_COOKIE预定义变量来访问Cookie的值。如下面的例子:
$exp = "PHP Cookie测试!";
setcookie("test", $exp);
echo $_COOKIE['test'];
?>
3、删除Cookie
当设置Cookie值后,在Cookie的有效期内,Cookie都会一直存在。只要是通过这台机器登录服务器的,本机上的Cookie信息随时都可以调用。出于安全的考虑,大多数用户不希望保存Cookie,所以可以手动删除掉Cookie。删除Cookie最好的办法是使用setcookie函数设置过期时间。
$test = "过期时间";
setcookie("test", $test);
setcookie("test", $test, time() + 1800);//0.5小时失效
?>
我们也还可以通过这种方式:
setcookie("test", "", time() - 3600);//删除cookie
?>
然后我们可以判断Cookie是不是为空,判断是否为空用函数empty($_COOKIE['test']),如果为空就表示已经删除了。
4、Cookie数组
PHP有一种机制,它可以把数组和Cookie联系起来。使用如下格式:
setcookie("Cookie_name[1]", "Cookie_value1");
setcookie("Cookie_name[2]", "Cookie_value2");
当需要使用Cookie数组时,可以用foreach循环来读取对应的变量名和值。如下代码:
setcookie("Cookie[PHP]", "PHP是一种脚本语言!");
setcookie("Cookie[MYSQL]", "MYSQL是一个数据库!");
setcookie("Cookie[Apache]", "Apache是一个服务器!");
foreach ($_COOKIE["Cookie"] as $name => $value) {
echo "$name:$value
";
// PHP:PHP是一种脚本语言!
// MYSQL:MYSQL是一个数据库!
// Apache:Apache是一个服务器!
}
?>
5、会话的基本方式
会话的基本方式有会话ID的传送和会话ID的生成。
会话ID的传送有两种方式,一种是Cookie方式,另一种方式是URL方式。
会话ID的生成
PHP的会话函数会自动处理ID的创建,但也可以通过手工方式来创建会话ID。它必须是不容易被人猜出来的,否则会有安全隐患。
一般推荐生成会话ID使用随机数发生器函数rand,函数声明如下:
rand(min,max);
注:如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机整数。例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
然后利用md5函数生成一个唯一的会话ID。如下:
md5(rand());
6、创建会话
创建一个会话需要通过以下几个步骤:启动一个会话,注册会话变量,使用会话变量,使用会话变量和注销会话变量。
启动一个会话
我们可以通过session_start()函数创建会话。声明如下:
bool session_start();
它判断是否有一个会话ID存在,如果不存在,就创建一个,并且使其能够通过全局数组$_SESSION进行访问。如果已经存在,则将这个已经注册的会话变量载入以供使用。
注册全话变量
会话变量被启动后,全部保存在数组$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直拉给该数组添加一个元素即可。如下代码:
$_SESSION["session_name"]="session_value";
使用会话变量
会话变量的使用就是如何获取它的值,如下代码:
if(!empty($_SESSION['session_name']))
$myvalue=$_SESSION['session_name'];
注销会话变量
注销会话变量,同数组的操作一样,直接注销$_SESSION数组的某个元素即可。如果要注销$_SESSION['session_name']变量可以直接使用如下语句:
unset($_SESSION['session_name']);
如果整个会话已经结束,首先应该注销所有的会话变量,然后使用session_destroy()函数清除会话ID。
session_start(); //启动会话
$_SESSION['u_name'] = "Jim"; //创建会话变量
echo "用户名:" . $_SESSION['u_name']; // 使用会话变量
echo '退出'; // 在dest.php中注销session
?>