零点起飞学PHP之Cookie和Session.pptx_第1页
零点起飞学PHP之Cookie和Session.pptx_第2页
零点起飞学PHP之Cookie和Session.pptx_第3页
零点起飞学PHP之Cookie和Session.pptx_第4页
零点起飞学PHP之Cookie和Session.pptx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第12章 Cookie和Session,Cookie和Session是Web中非常重要的两个技术。因为目前大多数Web网站是通过HTTP协议传输的,而HTTP协议是无状态的,也就是不会记录之前的操作,每次HTTP请求都可以视为独立的。Cookie和Session就是用来记录一些操作以供之后的请求使用。,12.1 Cookie技术,本节将会介绍Cookie的实质,以使读者理解Cookie的运作原理。然后在介绍Cookie在PHP中如何被使用,以及如何应用在实际案例中。,12.1.1 什么是Cookie,Cookie实际上是存储在客户端的普通文件。可以通过查看Cookie所在的位置来找到这些文件。 我们可以查看其中一个Cookie文件的属性以及其中的内容。 从Cookie文件属性我们也可以得到关于Cookie文件的一些信息。例如,Cookie文件的类型、缓存名称和过期时间。过期时间是Cookie的一项重要属性,它用来规定该Cookie可以被读取的截止时间。Cookie在未被浏览器禁止使用的情况下,当我们请求一个站点的时候,浏览器会检查磁盘中是否存在该站点的Cookie,如果存在并且未过期,则从Cookie文件中读取相关信息并将这些信息发送到指定站点,站点则根据cookie信息返回特定的网页。虽然Cookie文件是一个普通的文件,通常情况下并不是容易阅读的。,12.1.3 设置Cookie,Cookie在使用前需要生成Cookie文件,也就是设置Cookie。在PHP中,可以使用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中name对应的值;可选参数expire用来指定Cookie的过期时间,单位为秒;可选参数path用来设置Cookie可以使用的范围,默认为Cookie文件的当前目录;可选参数domain用来设置可以被使用的域名范围;可选参数secure用来规定是否只通过HTTPS协议传输;参数httponly用来规定是否值通过HTTP协议传输。,12.1.3 设置Cookie,【示例12-1】演示设置一个Cookie。 代码中time函数用来获取当前时间,那么过期时间“time()+60*60”则是当前时间1小时后。运行结果提示Cookie设置成功,我们可以找到该Cookie文件并查看其属性。 如果不为Cookie文件设置过期时间,则Cookie的失效期为直到浏览器关闭。在代码中一次可以设置多个Cookie,如果为同名的Cookie设置新值则为改写同名Cookie项的值。,12.1.4 读取Cookie,在设置Cookie文件后则可以使用Cookie,也就是读取Cookie文件中的信息。在PHP中,读取Cookie需要使用一个全局变量$_COOKIE。该变量是一个数组,所有设置的Cookie键值对均会加入该数组。,12.1.4 读取Cookie,【示例12-2】演示设置多个Cookie并输出全局变量$_COOKIE的信息。 从运行结果中我们并没有看到设置的Cookie信息。这是因为该程序执行前并没有该Cookie,程序执行后会设置一个Cookie。但我们刷新这个页面后,Cookie的内容才会被读取。 从上面的演示可以看到,$_COOKIE全局变量就是一个数组,那么我们就可以很容易地访问到其中的元素。 【示例12-3】演示读取Cookie中的内容。 由于本章示例中的源文件均处于同一路径下,因此该示例可以读取到示例12-2设置的Cookie。,12.1.5 删除Cookie,如Cookie不再需要使用未过期的Cookie时可以使Cookie文件立即过期,即删除Cookie。删除Cookie有两种常用的方式,一种为Cookie项设置空值,另一种为使Cookie项过期。为Cookie项赋空值可以使用setcookie函数并传入Cookie项名称。,12.1.5 删除Cookie,【示例12-4】演示为存在的Cookie项name设置空值。 注意:该示例的运行效果在刷新页面后才可以显示。 从运行结果我们可以看出,register项的值已经为空。使Cookie项过期则可以将setcookie函数的过期时间设置为当前时间或者当前时间之前的时间。 【示例12-5】演示将Cookie项name设置为过期。 注意:该示例的运行效果在刷新页面后才可以显示。 从运行结果可以看出,Cookie项name因为过期而不再存在于全局变量$_COOKIE中。,12.1.6 使用Cookie记录登录状态,Cookie的使用方法在前面都做了比较详细的介绍。下面我们就来演示一个简单使用Cookie记录用户登录状态并在两个页面间传递。,12.1.6 使用Cookie记录登录状态,【示例12-6】以下代码演示使用Cookie记录登录状态,并在两个页面间传递。 我们应该首先运行b.php文件。从运行结果可以看出,目前我们没有登录该站点,并可以单击“去登录”链接登录。在点击“去登录”链接后,浏览器会访问a.php文件,该文件会设置Cookie并输出跳转链接。单击“跳转到之前的页面”链接。 运行结果提示我们已经成功登录站点,这就是该页面读取到了Cookie中设置的login项。,12.2 Session技术,由于Cookie文件是保存在客户端磁盘中的,因此相对来说是不安全的。而且目前的浏览器都提供禁用Cookie的选项。因此,相对来说这是不可控的因素。如果客户将Cookie禁用,那么我们上一小节中的登录站点示例则会导致用户始终无法登录到站点。Session技术同Cookie技术是类似的,同样是使用文件来记录一些信息,而最大的不同点就在于Session文件是保存在服务器端的。,12.2.1 创建Session,与Cookie不同的,如果在PHP中需要使用Session,可以使用session_start函数来创建或者读取一个Session,该函数的语法如下: bool session_start ( void ) 该函数不接受任何参数。函数执行后会创建或则读取一个Session文件。创建Session文件时PHP会为该文件生成一个唯一的ID。读取Session文件则是获取通过POST、GET方式或者Cookie传递的Session名称和ID。Session名称可以通过session_name获取或者设置,该函数的原型如下: string session_name ( string $name ) 可选参数用来设置当前Session的名称,如果省略该参数则为获取Session的名称。Session默认名称在php.ini文件中设置: = PHPSESSID 获取Session的ID可以使用函数session_id函数,该函数的原型如下: string session_id ( string $id ) 可选参数用来设置当前Session的ID,如果省略该参数则为获取Session的ID。,12.2.1 创建Session,【示例12-7】演示创建一个Session并获取该Session的名称和ID。 从运行结果可以看到当前Session的名称和ID。在前面说过Session是存储在服务器端的文件。因此我们可以查看该Session文件。Session文件的保存路径可以在php.ini文件中配置: session.save_path = “D:xampptmp“ Session文件是以“sess_sessionID”的形式保存的。我们可以通过查看php.ini中设置的Session保存目录查看该文件。 由于我们只是创建了一个Session,并没有在其中存储信息,因此该文件中没有内容。,12.2.2 设置、读取和删除Session,在Session被创建以后我们就可以对Session进行设置、读取和删除操作。,1.设置Session,设置Session也就是在Session文件中存储内容。Session文件的内容是保存在全局变量$_SESSION中的。该变量也是一个数组,信息可以以键值对的形式作为数组元素被存储。向Session中存储数据则要比向Cookie中存储数据简单。操作过程就类似于为数据添加或者删除元素。,1.设置Session,【示例12-8】演示为向Session中存储内容。 从运行结果可以看到Session中已经存储了内容。我们可以查看该Session文件中的内容。 我们可以看到,Session文件中存储的信息可读性还是比较强的。它是以如下的格式存储的: 项名称|值类型:值长度:值 删除Session中的内容也是比较容易的。删除其中的一项可以使用unset函数释放$_SESSION中的元素。也可以为$_SESSION赋值一个空数组或者使用session_unset函数来删除Session中的所有数据。session_unset函数的原型如下: void session_unset ( void ) 删除Session中的内容比较简单,这里就不做详细介绍。,2.读取Session内容,获取Session中的内容类似于获取Cookie中的内容,通常使用如下的形式: $_SESSION名称 该知识点比较简单,这里就不做详细介绍。,3.删除Session,删除Session同删除Session中的内容是不同的。删除Session会将Session文件删除而不只是其中的数据。删除Session可以使用session_destroy函数,它的原型如下: bool session_destroy ( void ) 该函数不接受任何参数。需要注意的是Session文件会在一定的时间后自动被删除,这个时间可以在php.ini文件中设置: session.gc_maxlifetime = 1440 上面的配置就说明,Session的最大存在的时间就为1440秒。,3.删除Session,【示例12-9】演示创建并且删除一个Session。 运行结果获取到了Session的名称和ID,则说明Session被成功创建。而代码中第6行则删除了该Session文件,因此我们并不会在存放Session文件的目录中找到“sess_p9mn9th420hrsljnekju4oto11”文件。,12.2.3 使用Session记录信息,我们知道Cookie文件是存储在客户端的,是不安全的。因而不可以将一些敏感的数据存放在Cookie文件中。而Session存放在服务器端,相对来说是比较安全的。我们可以在Session中存放一些比较敏感的数据。,1.Session与Cookie联合记录敏感信息,Session可以通过Cookie传输的名称和ID取回已经存在的Session。因此我们需要将Session的名称和ID存入Cookie,通常的形式如下: setcookie(session_name(),session_id(),过期时间),1.Session与Cookie联合记录敏感信息,【示例12-10】演示使用Session保存用户名和密码并在两个页面间传递。 我们应该首先运行a.php文件。由于a.php中的用户名和密码都与b.php文件中的用户名和密码一致,因此可以作为注册用户登录。 下面我们将a.php文件中的用户名或者密码修改为同b.php文件中用户名和密码不对应后,再次运行a.php界面,然后点击“登录”链接。 经过以上的示例我们可以得知,Session已经很好地完成了我们期望的工作。我们知道浏览器提供了禁用Cookie的选项。我们可以在IE浏览器的Internet选项中进行设置。我们将示例中两个文件中的用户名和密码设置为一致的后再次执行a.php文件并点击“登录”连接。 该结果显示我们现在是以游客身份登录的,并且有一条user变量未定义的提示信息。这就是因为Cookie被禁用而导致a.php文件创建的Session不能被b.php文件取回。,2.以重写URL方式传送Session名称和ID,在禁用Cookie后,我们可以看到依赖Cookie的示例12-10就不能很好地工作了。Session需要通过Session的名称和ID来取回存在的Session信息。那么我们就可以通过在链接中显式地传递这些信息以供Session取回正确的Session信息。在地址中显式地传递信息可以为以下的形式: URL地址?参数 那么我们将Session的名称和ID作为参数则为以下的形式: URL地址?session_name()=session_id(),2.以重写URL方式传送Session名称和ID,【示例12-11】以下代码演示将示例12-10改写为不依赖Cookie工作的站点。 我们同样首先运行a.php文件,会出现如图12.23所示的界面。单击“登录”链接。 运行结果与我们的期望是一致的,由此我们就掌握了不依赖Cookie来记录信息的方法。由于类似于示例12-11的使用

温馨提示

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

评论

0/150

提交评论