PHP程序设计基础(微课版)(第2版)课件 第7章 PHP 的 Ckie 和 Session技术_第1页
PHP程序设计基础(微课版)(第2版)课件 第7章 PHP 的 Ckie 和 Session技术_第2页
PHP程序设计基础(微课版)(第2版)课件 第7章 PHP 的 Ckie 和 Session技术_第3页
PHP程序设计基础(微课版)(第2版)课件 第7章 PHP 的 Ckie 和 Session技术_第4页
PHP程序设计基础(微课版)(第2版)课件 第7章 PHP 的 Ckie 和 Session技术_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

7.1cookie技术陈学平CONTENTS1cookie技术1.1php中Cookie的功能和用途Cookie的功能Cookie应用范围Cookie有哪些用途呢?1.3php中如何读取Cookie目录011cookie技术021.1php中Cookie的功能和用途03Cookie的功能Cookie的功能Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。04Cookie应用范围Cookie应用范围Cookie常用于以下的3个方面:记录访客的某些信息。如可以利用Cookie记录用户访问网页的次数,或者记录方可曾经输入过的信息。另外,某些网站可以使用Cookie自动记录访客上次登录的用户名。在页面之间传递变量。浏览器并不会保存当前页面上的任何变量信息,当页面被关闭时页面上的所有变量信息将随之消失。如果用户声明一个变量id=6,要把这个变量传递到另一个页面,可以把变量id以Cookie形式保存下来,然后在下一页通过读取该Cookie来获取该变量的值。将所查看的Internet页存储在Cookie临时文件中,可以提高以后浏览的速度。Cookie应用范围注意:一般不要用Cookie保存数据集或其他大量的数据。并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端计算机中,因此最好不要保存敏感的、未加密的数据,否则会影响网络的安全性。05Cookie有哪些用途呢?Cookie有哪些用途呢?最根本的用途是Cookie能够帮助Web站点保存有关访问者的信息。Cookie的作用就类似于名片,它提供了相关的标识信息,可以帮助应用程序确定如何继续执行。使用Cookie能够达到多种目的,所有这些目的都是为了使Web站点记住访问信息。例如,一个实施民意测验的站点可以简单地利用Cookie作为布尔值,表示访问的浏览器是否已经参与了投票,从而避免重复投票;而那些要求用户登录的站点则可以通过Cookie来确定访问者是否已经登录过,这样就不必每次都输入凭据。1.2php中如何创建CookieCookie的创建十分简单,只要用户的浏览器支持Cookie功能,就可以使用PHP内建的函数来建立一个新的Cookie。在PHP中通过setcookie()函数创建Cookie。在创建Cookie之前必须了解的是,Cookie是HTTP头标的组成部分,而头标必须在页面其他内容之前发送,因此它必须最先输出。所以即使是空格或者是空行,都不要在调用setcookie()函数之前输出。若在setcookie()函数前输出一个HTML标记、echo语句,甚至一个空行都会导致程序出错。其语法是如下的格式:1.2php中如何创建Cookiesetcookie()函数定义一个和其余的HTTP标头一起发送的Cookie,它的所有参数是对应HTTP标头Cookie资料的属性。setcookie()函数的导入参数看起来不少,但除了参数name,其他参数都是非必须的,而经常使用的只有$name,$value和$expire这三个参数。setcookie()函数的参数说明如下:nameCookie的变量名可以通过$_COOKIE["cookiename"]调用变量名为cookiename的CookievalueCookie变量的值,该值保存在客户端,不能用来保存敏感数据可以通过$_COOKIE["values"]获取名为values的值expireCookie的失效时间,expire是标准的UNIX时间标记,可以用time()函数或者mktime()函数获取,单位为秒如果不设置Cookie的失效时间,那么Cookie将永远有效,除非手动将其删除pathCookie在服务端的有效路径如果该参数设置成“/”,则它在整个domain内有效,如果设置为“/11”,它在domain下的/11目录及子目录内有效。默认是当前目录domainCookie有效地域名如果要使Cookie在域名下的所有子域名都有效,应该设置为(6))secure指明Cookie是否通过安全的HTTPS,值为0或1如果值为1,则Cookie只能在HTTPS连接上有效;如果值为默认值0,则Cookie在HTTP和HTTPS连接上均有效。如果只有$name这一个参数,则原有此名称的cookie选项将会被删除,也可以使用空字符串来省略此参数。参数$expire和$secure是一个整数,可以使用0来省略此参数,而不是使用空字符串。但参数$expire是一个正规的UNIX时间整数,由time()或者mktime()函数传回。参数$secure指出此Cookie将只有在安全的HTTPS连接时传送。domain使用setcookie()函数的全部参数设置,实例代码如下的显示说明:上例中表示建立一个识别名称为“username”的Cookie,其内容值为字符串“sky”,而在客户端的存储有效期为1小时。参数"/test"表示Cookie只有在故武器的这个子目录或子目录中有效。参数"."使Cookie能在如域名下的所有子域中都有效,虽然“.”并不是必需的,但加上它会兼容更多的浏览器。当最后一个参数设为1时,则Cookie仅在安全的连接中才能被设置。使用setcookie()给的值只能是数字或者字符串,不能是其他的复杂结构。061.3php中如何读取Cookie1.3php中如何读取Cookie如果Cookie设置成功,客户端就拥有了Cookie文件,用来保存Web服务器为期设置的用户信息。在客户端使用了Windows系统去浏览服务器中的脚本,Cookie文件会被存放在“C:\DocumentsandSettings\用户名\Cookies”文件夹下。从PHP5之后,任何从客户端发送过来的Cookie信息,都会被自动保存在$_COOKIE全局数组中,所以在每个PHP脚本中都可以从该数组中读取相应的Cookie信息。$_COOKIE全局数组存储所有通过HTTP传递的Cookie资料内容,并以Cookie的识别名称为索引值、内容值为元素。1.3php中如何读取Cookie在设置Cookie脚本中,第一次读取它的信息并不会生效,必须刷新或到下一个页面才可以看到Cookie值,因为Cookie要先被设置到客户端,再次访问时才能被发送过来,这是才能被获取。所以要测试一个Cookie是否被成功设定,可以再其到期之前通过另外一个页面来访问其的值。在PHP中可以直接通过超全局变量数组$_COOKIE[]来读取浏览器端的Cookie值。实例1使用$_COOKIE[]读取浏览器端的Cookie实例代码如下:代码如下所示:1.3php中如何读取Cookie在上面的代码中,首先使用isset()函数检测Cookie文件是否存在。如果不存在,则使用setcookie()函数创建一个Cookie,并输出相应的字符串;如果Cookie文件存在,则使用setcookie()函数设置文件失效的时间,并输出用户上次访问网站的时间,最后在页面输出本次方位网站的当前时间。首次运行实例时,由于没有检测到Cookie文件,运行结果如下所示:第一次访问本次访问的时间为:19-05-2721:48:58如果用户在Cookie设置失效的时间(上面的实例为60秒)前刷新或者再次访问该网页,运行结果如下:1.3php中如何读取Cookie上次访问的时间为:19-05-2721:48:58本次访问的时间为:19-05-2721:49:31注意:如果未设置Cookie失效的时间,则在关闭浏览器时自动删除Cookie数据。如果为Cookie设置了失效的时间,浏览器将会记住Cookie数据,即使重新启动了计算机,只要没有到期,再访问网站时也会获得访问的数据信息。谢谢7.2PHPSession陈学平012Session2.1Session简介Session是什么Session一般译作会话,比方,在web应用的用户看来,他打开浏览器访问一个电子商务站点,登录、并完毕购物直到关闭浏览器,这是一个会话。2.1Session简介Session的原理Session的基本原理是服务端为每个session维护一份会话信息数据,而client和服务端依靠一个全局唯一的标识(也就是sessionid)来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session。2.1Session简介Sessionid的传递client和服务端之间的通信是通过sessionid建立联系的,那么sessionid是怎样传递的呢?用户端与服务端的web通信协议是http协议。而通过http取得用户数据惯用的三种方法各自是:POST方法、GET方法还有Cookie。而PHP默认传递方法正是Cookie,也是最佳方法。仅仅有在client不支持Cookie的时候(比方:浏览器禁用了Cookie功能)才会通过GET或POST方法来传递sessionid,即通过在URL的query_string部分传递sessionid。不建议使用GET方法传递參数,由于那样容易泄露信息。2.1Session简介2.2php中如何启动Session会话Session的设置与Cookie不同,必须先行启动,在PHP中必须调用session_start()函数,以便让PHP核心程序将和Session相关的内建环境变量预先载入到内存中。使用session_start()函数启动会话,语法格式如下的形式:1session_start(void);//创建Session,开始一个会话,进行Session初始化session_start()这个函数没有参数,且返回值均为TURE。该函数有两个主要的作用,仪式开始一个会话,而是返回已经存在的会话。注意:通常,session_start()函数在页面开始位置调用,然后会话变量被登录到数据$_SESSION。7.2.3php中如何注册和读取Session会话2.1Session简介注册Session会话在php中使用Session变量,除了必须要启动,还要经过一个注册的过程,注册和读取Session变量,都要通过访问$_SESSION数组完成。必须在调用session_start()函数开启Session之后才能使用。与$HTTP_SESSION_VARS不同,$_SESSION总是具有全局的范围,因此不要对$_SESSION使用global关键字。在$_SESSION关联数组中的键名具有和PHP中普通变量名相同的命名规则。会话变量被创建后,全部保存在数组$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接给该数组添加一个元素就好了。比如如下的实例会启动会话,创建一个Session变量并赋予一个空值,代码是如下的:执行脚本以后,Session变量就会被保存在服务器端的某一个文件夹中。2.1Session简介实例2Session注册会话实例代码如下:上面的实例中Session注册了两个变量,如果在服务器中找到为该用户保存Session变量的文件,打开后可以看到如下的内容:username|s:6:"sky";uid|i:1:"1";//保存用户Session中注册的两个变量的内容2.1Session简介读取Session会话首先需要判断会话变量是否有一个会话ID存在,如果不存在,就创建一个,并且使其能够通过全局数组$_SESSION进行访问;如果已经存在,则将这个已经创建的会话变量载入以提供给用户使用。例如:判断存储用户名的Session会话变量是否为空,如果不为空,则将该会话变量赋予$my_value,其代码显示如下:实例3读取Session会话实例代码如下:下面给出一个完整的实例2.1Session简介实例4session使用完整示例该实例由两个页面构成实例代码如下:session1.php<?phpif(isset($_POST['submit'])){session_start();//开始建立一个会话$_SESSION['season']=$_POST['season'];//存储会话数据header("Location:session2.php");//应特别注意header()里的格式问题2.1Session简介实例4session使用完整示例}?><b>存储会话</b><hr/>选择需要设置的数据:<formname="form1"method="post"action=""id="form1"><selectname="season"id="season_select"><optionvalue="春天">春天</option>2.1Session简介实例4session使用完整示例<optionvalue="夏天">夏天</option><optionvalue="秋天">秋天</option><optionvalue="冬天">冬天</option></select><br/><br/><br/><inputtype="submit"name="submit"value="submit"/></form>2.1Session简介实例4session使用完整示例SESSION2.PHP代码如下session_start();//建立或者继续一个会话$season=$_SESSION['season'];//读取会话数据echo"<b>读取会话</b><br/><br/>";switch($season){case'春天';echo'现在是绿意盎然的春天!';break;case'夏天';<?php2.1Session简介实例4session使用完整示例echo'现在是热情四溢的夏天!';case'秋天';echo'现在是丰收果实的秋天!';break;case'冬天';echo'现在是白雪皑皑的冬天!';break;default;echo'对不起,会话中没有数据或者不存在该对话!';break;2.1Session简介实例4session使用完整示例}?>测试一下效果如图7-1、7-2所示。打开session1.php测试图7-1存储会话提交后结果2.1Session简介实例4session使用完整示例图7-2读取会话7.2.4php中如何删除和销毁Session当使用完一个Session变量后,可以将其删除;当完成一个会话以后,也可以将其销毁。如果用户想退出Web系统,就需要为他提供一个注销的功能,把他的所有信息在服务器中销毁。2.1Session简介实例4session使用完整示例删除会话的主要有删除单个会话、删除多个会话和结束当前会话有3种方式,下面就3种方式分别作一个简单的介绍。2.1Session简介删除单个会话删除单个会话即删除单个会话的变量、同数组的操作一样,直接注销$_SESSION数组的某个元素即可。$_SESSION['user']变量,可以使用unset()函数,代码如下所示:注意:使用unset()函数时,要注意$_SESSION数组中元素不能省略,即不可以一次注销整个数组,这样会禁止整个会话的功能,如unset($_SESSION)函数会将全局变量$_SESSION销毁,而且没有办法将其回复,用户也不能再注册$_SESSION变量。如果要删除多个或者全部会话,可采用下面的两种方法。2.1Session简介删除多个会话如果想把某个用户在Session中注册的所有变量都删除,也就是删除多个会话即一次注销所有的会话变量,可以通过将一个空的数组赋值给$_SESSION来实现,其代码显示如下:2.1Session简介结束当前会话如果整个会话已经结束,首先应该注销所有会话变量,然后使用session_destroy()函数清除结束当前的会话,并清空会话中的所有资源,彻底销毁Session,其代码如下显示:前面的讲解可以总结出Session的删除和注销过程需要好几个步骤。下面将通过一个实例,提供完整的代码,运行该脚本后就可以关闭Session,并销毁与本次会话有关的所有资源。彻底销毁Session代码如下所示:2.1Session简介结束当前会话注意:使用$_SESSION=array()清空$_SESSION数组的同时,也将这个用户在服务器端对应的Session文件内容清空。而使用session_destroy()函数时,则是将这个用户在服务器端对应的Session文件删除。谢谢7.3用户会话登录案例陈学平013用户登录案例实例5:使用cookie和session实现用户登录1.cookie小实例<?phpsetcookie("user","cxp",time()+3600);echo$_COOKIE["user"];?>说明:setcookie("user","cxp",time()+3600);设置一个用户,并给它一个值cxpecho$_COOKIE["user"];输出给定的值,测试效果如图7-3所示。实例5:使用cookie和session实现用户登录图7-3可以正常显示下面介绍用户登录实例,其中会用到PHP7连接数据库的方法。在第10章,会单独介绍数据库操作,本章初步介绍一下。用户登录功能分三个页面来实现。登录页面login.html代码如下:<html><head><title>Login</title><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><formname="form1"method="post"action="login.php">登录页面login.html<tablewidth="300"border="0"align="center"cellpadding="2"cellspacing="2"><tr><tdwidth="150"><divalign="right">用户名:</div></td><tdwidth="150"><inputtype="text"name="username"></td></tr><tr><td><divalign="right">密码:</div></td>登录页面login.html<td><inputtype="password"name="passcode"></td></tr><tr><td><divalign="right">Cookie保存时间:</div></td><td><selectname="cookie"id="cookie"><optionvalue="0"selected>浏览器进程</option><optionvalue="1">保存1天</option>登录页面login.html<optionvalue="2">保存30天</option><optionvalue="3">保存365天</option></select></td></tr></table><palign="center"><inputtype="submit"name="Submit"value="Submit"><inputtype="reset"name="Reset"value="Reset"></p>

</form>

</body>

</html>登录检测页login.php代码如下:<?phpheader("Content-Type:text/html;charset=GB2312");//该句代码实现中文显示,否则在有些时间会出现乱码。$link=@mysqli_connect("localhost","root","root",'test')//选择数据库之前需要先连接数据库服务器,注意PHP7中mysqli,不是mysql。在该句中实现本地服务器的连接,需要用正确的用户名和密码,连接服务器,同时连接数据库testordie("数据库服务器连接失败");//如何失败给出提示登录检测页login.php//$conn=mysqli_connect($servername,$username,$password);//Checkconnectionif(!$link){die("连接失败:".mysqli_connect_error());}//echo"连接成功";上面的代码是判断数据库服务器是否连接成功,如果失败则不会进入下一步。//exit;//获取用户输入登录检测页login.php$username=$_POST['username'];1$passcode=$_POST['passcode'];2$cookie=$_POST['cookie'];3//ECHO$username;4//exit;5//执行SQL语句6//下面的语句同样是用mysqli,不是用mysql,同时加入了$link,进行连接。7登录检测页login.php$query=mysqli_query($link,"selectusername,userflagfromuserswhereusername='$username'andpasscode='$passcode'");//ordie("SQL语句执行失败");//判断用户是否存在,密码是否正确if($row=mysqli_fetch_array($query)){if($row['userflag']==1or$row['userflag']==0)//判断用户权限信息是否有效登录检测页login.php{switch($cookie)//根据用户的选择设置cookie保存时间{case0://保存Cookie为浏览器进程setcookie("username",$row['username']);break;case1://保存1天setcookie("username",$row['username'],time()+24*60*60);break;登录检测页login.phpcase2://保存30天setcookie("username",$row['username'],time()+30*24*60*60);break;case3://保存365天setcookie("username",$row['username'],time()+365*24*60*60);break;}登录检测页login.phpheader("location:main.php");//自动跳转到main.php}else{echo"用户权限信息不正确";}}else{else{echo"用户名或密码错误";}?>登录成功验证页面代码如下:<?phpheader("Content-Type:text/html;charset=GB2

温馨提示

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

评论

0/150

提交评论