Cookie是存储在客户端计算机上的文本文件,用于跟踪使用情况。PHP透明地支持HTTP Cookie。
识别返回用户有三个步骤:
服务器脚本向浏览器发送一组cookie。例如姓名、年龄或身份证号码等。
浏览器将此信息存储在本地计算机上以供将来使用。
下次浏览器向web服务器发送任何请求时,它会将这些cookie信息发送给服务器,服务器会使用这些信息来识别用户
PHP提供了setcookie()函数来设置cookie。此函数最多需要六个参数,应该在<html>标记之前调用。对于每个cookie,必须单独调用此函数。
setcookie(name, value, expire, path, domain, security);
setcookie("username", "zhangsan", time()+3600, "/", "", 0);
setcookie("password", "123456", time()+3600, "/", "", 0);
?>
PHP可以通过 C O O K I E 或 _COOKIE或 COOKIE或HTTP_COOKIE_VARS来访问Cookie
setcookie("username", "zhangsan", time()+3600, "/", "", 0);
setcookie("password", "123456", time()+3600, "/", "", 0);
?>
<?php
// isset():判断cookie是否存在
if(isset($_COOKIE["username"])){
echo $_COOKIE["username"]."
";
}else{
echo "Not recognized";
}
echo $HTTP_COOKIE_VARS["password"] . "
";
?>
要删除一个cookie,使用name参数调用setcookie(),但这并不可靠。应该将cookie设置为已过期的日期是最安全的
setcookie("username", "zhangsan", time()-60, "/", "", 0);
?>
<?php
// isset():判断cookie是否存在
if(isset($_COOKIE["username"])){
echo $_COOKIE["username"];
}else{
echo "Not recognized";
}
?>
另一种使数据可以给整个网站的各个页面访问的方法是使用Session
Session在服务器上的临时目录中创建一个文件,其中存储了注册的Session变量及其值。该数据将在访问期间提供给网站上的所有页面。
临时文件的位置由被称为session.save_path文件名的php.ini文件所设置。在使用任何Session变量之前,请确保已设置此路径。
当Session开始时,会执行以下步骤:
PHP首先为该特定会话创建一个唯一标识符,该标识符是32个十六进制数的随机字符串,如3c7foj34c3jj973hjkop2fc937e3443。
一个名为PHPSESSID的cookie会自动发送到用户的计算机,以存储唯一的会话标识字符串。
在服务器上指定的临时目录中自动创建一个文件,并带有以sess_ie sess_3c7foj34c3jj973hjkop2fc937e3443为前缀的唯一标识符的名称。
当PHP脚本想要从会话变量中检索值时,PHP会自动从PHPSESSID cookie中获取唯一的会话标识符字符串,然后在其临时目录中查找具有该名称的文件,并通过比较两个值进行验证。
当用户关闭浏览器或离开站点后,会话结束,服务器将在预定时间段(通常为30分钟)后终止会话。
通过调用session_start()函数可以轻松启动PHPSession。此函数首先检查Session是否已启动,如果没有启动,则启动一个Session。建议将对session_start()的调用放在页面的开头。
Session变量存储在名为$_Session[ ]的关联数组中。这些变量可以在Session的生存期内访问。
session_start();
// 使用isset()函数检查Session变量是否已设置。
if(isset($_SESSION['count'])){
$_SESSION['count'] += 1;
}else{
$_SESSION['count'] = 1;
}
echo "You have visited this page:".$_SESSION['count'];
?>
session_destroy()函数可以销毁PHPSession。此函数不需要任何参数,一次调用可以销毁所有Session变量。如果要销毁单个Session变量,则可以使用unset()函数来取消Session变量。
session_start();
// 使用isset()函数检查Session变量是否已设置。
if(isset($_SESSION['count'])){
$_SESSION['count'] += 1;
}else{
$_SESSION['count'] = 1;
}
//unset($_SESSION['count']);
session_destroy();
echo "You have visited this page:".$_SESSION['count'];
?>
您可以在php.ini文件中设置auto_start变量为1,那么当用户访问您的站点时,您不需要调用start_session()函数来启动会话。
可能存在用户不允许在其机器上存储Cookie的情况。因此,还有另一种方法可以将Session的ID发送到浏览器。
您可以使用Session启动时定义的常量SID。如果客户端未发送正确的会话cookie,其格式为session_name=session_id。否则,它将扩展为空字符串。因此,您可以无条件地将其嵌入到URL中。