PHP的会话也称为Session。PHP在操作Session时,当用户登录或访问一些初始页面时做事器会为客户端分配一个SessionID。SessionID是一个加密的随机数字,在Session的生命周期中保存在客户端。它可以保存在用户机器的Cookie中,也可以通过URL在网络中进行传输。
用户通过SessionID可以注册一些分外的变量,称为会话变量,这些变量的数据保存在做事器端。在一次特定的网站连接中,如果客户端可以通过Cookie或URL找到SessionID,那么做事器就可以根据客户端传来的SessionID访问会话保存在做事器真个会话变量。
Session的生命周期只在一次特定的网站连接中有效,当关闭浏览器后,Session会自动失落效,之前注册的会话变量也不能再利用。详细的利用步骤如下:
1)初始化会话。在实现会话功能之前必须要初始化会话,初始化会话利用session_start()函数。
bool session_start(void)
该函数将检讨SessionID是否存在,如果不存在,则创建一个,并且能够利用预定义数组$_SESSION进行访问。如果启动会话成功,则函数返回TRUE,否则返回FALSE。会话启动后就可以载入该会话已经注册的会话变量以便利用。
2)注册会话变量。自PHP 4.1往后,会话变量保存在预定义数组$_SESSION中,以是可以以直接定义数组单元的办法来定义一个会话变量,格式如下:
$_SESSION[\"大众键名\"大众]=\公众值\"大众;
会话变量定义后被记录在做事器中,并对该变量的值进行跟踪,直到会话结束或手动注销该变量。
3)访问会话变量。要在一个脚本中访问会话变量,首先要利用session_start()函数启动一个会话。之后就可以利用$_SESSION数组访问该变量了。
4)销毁会话变量。会话变量利用完后,删除已经注册的会话变量以减少对做事器资源的占用。删除会话变量利用unset()函数,语法格式如下:
void unset(mixed $var [, mixed $var [, $... ]])
解释:$var是要销毁的变量,可以销毁一个或多个变量。要一次销毁所有的会话变量,利用session_unset();。
5)销毁会话。利用完一个会话后,要注销对应的会话变量,然后再调用session_destroy()函数销毁会话,语法格式如下:
bool session_destroy ( void )
该函数将删除会话的所有数据并打消SessionID,关闭该会话。
二、cookie
Cookie可以用来存储用户名、密码、访问该站点的次数等信息。在访问某个网站时,Cookie将html网页发送到浏览器中的小段信息以脚本的形式保存在客户真个打算机上。
一样平常来说,Cookie通过HTTP Headers从做事器端返回浏览器。首先,做事器端在相应中利用Set Cookie Header来创建一个Cookie。然后浏览器在要求中通过Cookie Header包含这个已经创建的Cookie,并且将它返回至做事器,从而完成浏览器的验证。
Cookie技能有很多局限性,例如:
1)多人共用一台打算机,Cookie数据随意马虎透露。
2)一个站点存储的Cookie信息有限。
3)有些浏览器不支持Cookie。
4)用户可以通过设置浏览器选项来禁用Cookie。
正是由于以上Cookie的一些局限性,以是,在进行会话管理时,SessionID常日会选择Cookie和URL两种办法来保存,而不是只保存在Cookie中。
详细而言,Cookie的利用步骤如下:
1)创建Cookie。在PHP中创建Cookie利用setcookie()函数,语法格式如下:
bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]])
① $name:表示Cookie的名字。
② $value:表示Cookie的值,该值保存在客户端,以是不要保存比较敏感的数据。
③ $expire:表示Cookie过期的韶光,这是一个UNIX韶光戳,即从UNIX纪元开始的秒数。对付$expire的设置一样平常通过当前韶光戳加上相应的秒数来决定。例如,time()+1200表示Cookie将在20min后失落效。如果不设置则Cookie将在浏览器关闭之后失落效。
④ $path:表示Cookie在做事器上的有效路径。默认值为设定Cookie确当前目录。
⑤ $domain:表示Cookie在做事器上的有效域名。例如,要使Cookie能在example.com域名下的所有子域都有效,该参数应设为\"大众.example.com\公众。
2)访问Cookie。通过setcookie()函数创建的Cookie是作为数组的单元,存放在预定义变量$_COOKIE中。也便是说,直接对$_COOKIE数组单元进行赋值也可以创建Cookie。但$_COOKIE数组创建的Cookie在会话结束后就会失落效。
3)删除Cookie。Cookie在创建时指定了一个过期韶光,如果到了过期韶光,那么Cookie将自动被删除。在PHP中没有专门删除Cookie的函数。如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,那么可以利用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。
示例代码如下:
<?php
$_COOKIE[\"大众user\"大众]=\"大众administrator\"大众;
setcookie(\公众password\公众,\公众123456\"大众,time()+3600);
$_COOKIE[\公众user\"大众]=\"大众\公众; //利用$_COOKIE打消Cookie
setcookie(\"大众password\"大众,\公众\公众); //利用setcookie()函数打消Cookie
print_r($_COOKIE); //输出:Array ( [user] => )
?>
Cookie和Session都是用来实现会话机制的,由于HTTP协议是无状态的,以是要想跟踪一个用户在同一个网站之间不同页面的状态,须要有一个机制,称为会话机制。