资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第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文件中设置: session.name = 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保存用户名和密码
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号