9.2 Session
当Web服务器收到客户端请求时,它会找出相关的HTML文件或程序,然后加以运行,将结果转换成HTML文件,再传送给客户端并中断联机。由于Web服务器在处理完客户端的请求便会中断联机,所以Web服务器并没有记录客户端的任何信息,倘若要记录客户端的信息,必须使用一些特殊的技巧,如Cookie和Session。
9.2.1 什么是Session
Session与Cookie不同,是将用户参数留在服务器端。Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期。在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分。Session会话时,SessionID会分别保存在客户端和服务器端两个位置,对于客户端使用临时的Cookie保存(Cookie名称为PHPSESSID)或者通过URL字符串传递,服务器端也以文本文件形式保存在指定的Session目录中。Session通过ID接受每一个访问请求,从而识别当前用户、跟踪和保持用户具体资料,以及Session变量(在Session活动期间,可在Session中存储数字或文字资料),比如session_name等,这些变量信息保存在服务器端。Session默认的生命周期起始于浏览器开始运行时,结束于浏览器终止运行时,此时的Session是存放在服务器内存,但可以自行设置Session的生命周期(通常是以秒为单位),将它写入服务器端的磁盘,这样就不必担心Session自动消失而遗漏了某些信息。
9.2.2 Session的使用
Session对应会话,使用会话必须先调用session_start()函数,函数的功能和用法如下。
session_start():开始一个会话或者返回已经存在的会话。
注意:这个函数没有参数,且返回值均为true。如果使用基于Cookie的Session,那么在使用session_start()之前浏览器不能有任何输出,否则会发生以下错误。
例9-5 通过Session进行网站流量的统计。
<?php session_start(); if (!isset($_SESSION['Count'])) { $_SESSION['Count']=1; } else $_SESSION['Count']++; echo "这是您在同一个浏览器 {$_SESSION['Count']}次加载本网页"; ?>
运行效果如图9-4所示。