第九章 PHP会话处理_第1页
第九章 PHP会话处理_第2页
第九章 PHP会话处理_第3页
第九章 PHP会话处理_第4页
第九章 PHP会话处理_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于WEB的信息系统的设计与实现信息工程学院第九章PHP会话处理本章知识点9.1什么是会话处理9.2Cookie的应用9.3Session的应用9.1什么是会话处理9.1.1问题的提出9.1.2解决方案9.1.1问题的提出超文本传输协议(HTTP),它定义了通过互联网传输数据的规则。HTTP是一种无状态的协议,也就是每次请求都是独立的,和之前或之后的请求无关。这就意味着如果后续处理需要前面的信息,则必须重传数据,这样可能导致每次连接传送的数据量增大。

HTTP协议没有一个内建机制来维护两个事物之间的状态。当一个用户在请求一个页面后再请求另一个页面时,HTTP将无法告诉我们这两个请求是来自同一个用户。例如,在网上商城系统中,有一些页面(比如发表评价页面、购买商品页面)需要用户登录后才能浏览。但在打开这些页面时系统并不知道访问者之前是否登录过,于是就可能出现要求用户重复登录的情况。由于HTTP无状态而造成的问题9.1.2解决方案1.Cookie2.Session(会话)1.CookieCookie(小甜饼)有时也用其复数形式Cookies,指存储在用户本地上的少量数据,最经典的Cookie应用就是记录登录用户名和密码,这样下次访问时就不需要输入自己的用户名和密码了。也有一些高级的Cookie应用,例如在网上商城查阅商品时,该商城应用程序就可以记录用户兴趣和浏览记录的Cookies。在下次访问时,网站根据情况对显示的内容进行调整,将用户所感兴趣的内容放在前列。Cookie存在如下缺陷Cookie的数据大小是由限制的,大多数浏览器只支持最大为4096字节的Cookie。有时不能满足需求。客户端可以禁用或清空Cookie,从而影响程序的功能。当多人共用一台计算机时使用Cookie可能会泄露用户隐私,带来安全问题。2.Session(会话)Session可以保持网站服务器和网站访问者的交流,访问者可以将数据保存在网站服务器中。为了区分不同的访问者,网站服务器为每个网站访问者都分配一个会话编号SID,一个访问者在Session中保存的所有数据都与他的SID相关联。在访问者打开的所有页面中,都可以通过SID设置和获取Session数据,因此通过Session可以实现个页面间的数据共享。用户在任意一个页面登录后,都可以将登录标记和登录用户名保存在Session变量中。这样在其他页面中就可以获知用户已经登录了,从而避免重复登录。使用Cookie和Session技术的解决方案9.2Cookie的应用9.2.1Cookie的工作原理9.2.2设置Cookie数据9.2.3读取Cookie数据9.2.4删除Cookie数据9.2.5在用户身份验证时使用Cookie9.2.1Cookie的工作原理 cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。简单说来,Cookie是web服务器暂时存储在用户硬盘上的一个文本文件,并且随后被Web浏览器读取。当用户再次访问Web网站时,网站会通过读取Cookie文件记录这位访客的特定信息,从而迅速作出相应。

Cookie是Web服务器存放在用户硬盘的一段文本,其中存储着一些“键-值”对。每个Web站点都可以在用户的机器上存放Cookie,并可以在需要时重新获取Cookie数据。通常Web站点都有一个Cookie文件。 格式: 用户名@网站网址[数字].txtCookie的工作原理

9.2.2设置Cookie数据可以使用setcookie()函数设置Cookie数据,语法如下:bool

setcookie

(

string

$name

[,

string

$value

[,

int

$expire

=0

[,

string

$path

[,

string

$domain

[,

bool

$secure

=false

[,

bool

$httponly

=false

]]]]]])参数说明如下:name,Cookie的名字。value,Cookie的值。expire,Cookie的有效期,单位为秒。path

,Cookie的服务器路径,此目录下的网页都能访问该cookie。domain,Cookie的域名,此域名下的网页都能访问该cookie。secure,规定是否通过安全的HTTPS连接来传输cookie。httponly,如果设置为TRUE,则只能通过HTTP访问Cookie,不能使用脚本语言(例如JavaScript访问Cookie)。如果设置为FALSE,则没有此限制。如果设置Cookie数据成功,则函数返回true,否则返回false。提示

Setcookie()函数会发送网页头信息给客户端浏览器,浏览器会根据这些信息设置本地cookie,而<html>标签是网页正文,因此必须在头信息发送完之后才能发送,也就是说setcookie()函数必须在<html>之前才能正常工作。Cookie必须最先输出,即使在setcookie()函数前输一个HTML标记或echo语句,甚至一个空行都会导致程序出错。【例9-1】setcookie()函数的示例<?php$value="mycookievalue";//发送一个简单的cookiesetcookie("TestCookie",$value,time()+60*60*24*30);?><html><body>...</body></html>例题9-2.php<?phpsetcookie('PHPcookie',);setcookie('PHPcookie',time+3600);//设置cookie的有效时间1小时?>9.2.3读取Cookie数据在PHP中,可以使用$_COOKIE数组读取Cookie数据,方法如下:Cookie值=$_COOKIE[Cookie名]也可以直接使用print_r()函数打印$_COOKIE数组的内容。例题9-3改进【例9-1】,打印$_COOKIE数组的内容,代码如下:<?php$value="mycookievalue";//发送一个简单的cookiesetcookie("TestCookie",$value,time()+60*60*24*30);?><html><body><?phpif(isset($_COOKIE["TestCookie"]))

echo($_COOKIE["TestCookie"]."<BR>");print_r($_COOKIE);?></body></html>【例9-2】的运行结果

例题9-4<?phpif(!isset($_COOKIE["visittime"])){ //判断cookie文件是否存在?如果不存在setcookie("visittime",date("Y-m-dH:i:s"),time()+3600);//设置一个cookie的变量echo"欢迎您第一次访问我们的网站";//输出字符串}else{ //如果cookie存在echo"您上次访问我们的网站的时间为:".$_COOKIE["visittime"];//显示上次设置的cookie的值setcookie("visittime",date("Y-m-dH:i:s"),time()+3600);//设置新的cookie,失效时间为一个小时echo"<br>";//换行}?>使用Cookies记录用户访问网页的次数<?phpif(isset($_COOKIE["num"])) $num=$_COOKIE["num"];else $num=0; $num=$num+1;//发送一个简单的cookiesetcookie("num",$num,time()+60*60*24*30);?><html><body><?phpif($num>1) echo("您是第".$num."次访问本站了");else echo("欢迎你首次访问本站");?><br><br>下面是网页正文<br></body></html>9.2.4删除Cookie数据当Cookie被创建后,如果没有设置其到期时间,相应的Cookie文件会在关闭浏览器时被自动删除。如果需要在关闭浏览器之前删除Cookie文件,可以有两种方法。一种是使用浏览器手动删除,另一种则是使用setcookie()函数删除。每个Cookie都有有效期,删除Cookie实际上就是将其有效期设置为过去的时间。删除TestCookie,代码如下:setcookie("TestCookie","",time()-3600);也就是将其有效期设置为1小时之前。9.2.5在用户身份验证时使用Cookie

前面的章节介绍了使用表单提交用户身份认证信息的例子,本节对该例进行完善。用户可以选择在登录成功后,将用户身份认证信息保存在Cookie里,以便下次打开登录页面时自动带入用户名和密码。 首先将5.3.1小节中的login.html改名为login.php,因为要在其中添加PHP程序。在login.php的表单中添加一个复选框checkboxCookie,其定义代码如下: <inputname="checkboxCookie"type="checkbox"checked> 用户名文本框 在用户名文本框的定义代码中增加从Cookie中读取用户名信息的功能,具体如下: <inputtype="text"name="txtUserName"value="<?PHPecho($_COOKIE["username"]);?>"size="20"> $_COOKIE["username"]中保存上次成功登录的用户名,保存方法将在稍后介绍。密码文本框 在密码文本框的定义代码中增加从Cookie中读取密码信息的功能,具体如下:<inputtype="password"name="txtPwd"value="<?PHPecho($_COOKIE["password"]);?>"size="20"> $_COOKIE["password"]中保存上次成功登录的密码,保存方法将在稍后介绍。check.php

处理提交的用户身份认证信息的脚本为check.php。在check.php中,判断是否选中了复选框checkboxCookie,如果选中且登录成功,则将用户信息保存在Cookie中,代码如下:<?PHP//取输入的用户名和密码

$UID=$_POST['txtUserName'];$PWD=$_POST['txtPwd'];//验证用户名和密码

if($UID=="admin"and$PWD=="pass"){echo("您已经登录成功,欢迎光临。");

if($_POST['checkboxCookie']=="on"){

setcookie("username",$UID,time()+60*60*24*365);

setcookie("password",$PWD,time()+60*60*24*365);}}elseecho("登录失败,请返回重新登录。");?>在登录页面中自动加载用户名和密码在浏览器中访问login.php,登录成功,关闭浏览器。然后再次在浏览器中访问login.php,确认可以自动加载用户名和密码

9.3Session的应用9.3.1Session的工作原理9.3.2开始会话9.3.3

全局数组$_SESSION9.3.4删除会话变量9.3.5销毁会话9.3.6配置Session9.3.1Session的工作原理

Session被翻译成为中文“会话”,其基本含义是指有始有终的一系列动作/消息,例如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称为一个Session。Session可以实现客户端和Web服务器的会话,Session数据也以“键-值”对的形式存储在文件中。与Cookie不同,Session数据保存在服务器上。在会话存续期间,Web服务器上的各页面都可以获取Session数据,从而了解与客户端沟通的历史记录。从而避免用户在浏览不同页面时重复输入数据(例如重复登录)。 每个Web站点都同时与多个用户进行会话,那么,Web站点又是如何区分与它会话的用户呢?它会给每个访问者分配一个会话ID(SID,session_id)。用户第1次访问Web站点时会得到Web服务器分配的会话ID,以后每次浏览器提交请求都会带上这个会话ID,所有Session数据都与会话ID相关联。Session的工作原理9.3.2开始会话在PHP脚本中,可以使用session_start()函数开始会话,语法如下:bool

session_start(void);如果成功开始了会话,则函数返回True;否则返回False。使用session_start()函数之前浏览器不能有任何输出,否则会产生错误。

如果使用参数$name,则将其设置为Session的名字;否则直接返回当前的Session名。session_start()函数会为该会话随机生成一个SessionID。可以使用session_id()函数获取或设置SessionID,语法如下stringsession_id([string$id])如果使用参数$id,则将其设置为SessionID;否则直接返回当前的SessionID。SessionID用于标识一个Session。除了SessionID,Session还有一个名字。可以使用session_name()函数获取或设置Session的名字,语法如下:stringsession_name([string$name])【例9-6】

开始会话并输出SessionID和Session的名字,代码如下:<?php

session_start();

echo("session_id()=".session_id());echo("<br>");

echo("session_name()=".session_name());?>

9.3.3全局数组$_SESSION可以使用全局数组$_SESSION设置和获取Session数据,它的用法与普通数组相同,只是数组$_SESSION由系统定义,可以在程序的任何位置访问它。在访问数组$_SESSION之前,应该调用session_start()函数开始会话【例9-7】

使用全局数组$_SESSION存取Session数据的例子。<?php

date_default_timezone_set('Asia/Chongqing');//系统时间差8小时问题

//开始会话

session_start();

if($_SESSION["last_visit"]){echo"您上次访问的时间为:";echodate("Y-m-d,H:i:s",$_SESSION["last_visit"]);echo"<br>";echo"访问次数:".$_SESSION["num_visits"];}elseecho"这是您的第1次访问。";$_SESSION["last_visit"]=time();$_SESSION["num_visits"]++;?>第1次访问【例9-6】网页时的界面第2次访及以后访问【例9-6】网页时的界面9.3.4删除会话变量对于不需要保留的辉会话变量,可以调用unset()函数将其删除,释放占用的内存空间。unset()函数的语法如下:voidunset(mixed$var[,mixed$var[,$...]])可以看到,unset()函数可以同时释放多个变量。unset()函数不仅可以释放会话变量,也可以用来释放普通变量。【例9-8】

使用unset()函数释放会话变量的例子。<?php//开始会话

session_start();$_SESSION["num_visits"]++;

unset($_SESSION["num_visits"]);

echo($_SESSION["num_visits"]);?>以脚本运行的结果如下:PHPNotice:Undefinedindex:num_visitsinC:\workspace\test\hello.phponline7PHPStacktrace:PHP1.{main}()C:\workspace\test\hello.php:09.3.5销毁会话尽管超过有效期的Session数据会被自动销毁,但也可以使用PHP提供的系统函数手动销毁会话。1.session_unset()函数session_unset()函数的功能是释放所有的Session变量,但不删除session文件以及不释放对应的sessionID,其语法如下:voidsession_unset(void)【例9-9】使用session_unset()函数销毁会话的例子。<?php

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论