《网页编程语言学习第8章.ppt》由会员分享,可在线阅读,更多相关《网页编程语言学习第8章.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会会 话话 课程内容课程内容会话管理的解决方案Session与Cookie方案一方案一使用使用SessionSession方案二方案二使用使用CookieCookie购物车系统购物车系统吉林省三扬科技咨询有限公司http:/会话管理的解决方案Session与Cookie在Web服务器端编程中,会话状态管理是一个很重要的方面。我们知道HTTP是一种无状态(Stateless)的协议,它无法区分当前的一连串请求是来自相同的客户端还是不同的客户端,或者客户端是处于连接状态还是断开状态。正是由于HTTP协议的无状态特点,因此而带来了一系列的问题,比如在某段时间内有许多用户登录网上银行帐号,它们各自进行
2、着买卖基金、转帐、查询余额等不同的业务,如果服务器不能记住用户的身份,就可能出现刚买的基金存进了其它人的帐号、转帐失误等许多未知的后果。再如通过在线商店购物时,由于服务器不能记住以前的事务,当我们把商品加入购物车时,服务器不知道购物车里原先有些什么,不能记住客户都买了什么商品,因此购物车的功能将无法实现。吉林省三扬科技咨询有限公司http:/会话管理的解决方案Session与Cookie那么如何才能实现会话状态呢?在PHP中,通常有以下两种解决方案:Session:中文翻译为“会话”,指用户访问网页到与服务器断开连接的一个时间段。Session的功能是跟踪用户状态,存储整个会话过程中保持其状态
3、的信息。Cookie:Cookie是一个小文本文件,该文件里面记录了会话信息并存储在客户端。吉林省三扬科技咨询有限公司http:/方案一方案一使用使用SessionSessionSession简介Session的创建与销毁Session的配置与应用Session中的存取对象与应用数组Session的共享与安全提高Session的效率吉林省三扬科技咨询有限公司http:/Session简介Session是什么呢?通常在中文里翻译为“会话”。由于网页是一种无状态的连接程序,因此无法得知用户的浏览状态。所以我们必须通过Session来记录用户的有关信息,以供用户再次以此身份对Web服务器提供要求时作
4、确认。Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的 Session变量,两个用户之间无法通过Session变量共享信息。吉林省三扬科技咨询有限公司http:/Session简介在PHP中,Session由一种能够存储用户发出的请求状态信息的方法组成。当用户每次访问网站时,都会为每个访问者创建一个唯一的标识符来区分客户的身份,这个标识符被称为会话ID(SID)
5、。其实SID就是Session 文件的文件名,具有唯一性和随机性,以确保Session 的安全。若客户端未禁用Cookie,SID存储在Cookie(称为会话Cookie)中,否则使用URL来传递SID。吉林省三扬科技咨询有限公司http:/Session的创建与销毁在PHP5中,使用session_start()函数来创建一个会话状态,同时意味着会话的开始,session_start()函数的语法格式:如果拥有会话ID,session_start()函数将会继续当前会话,否则创建一个新会话,并为用户会话分配一个会话ID。开始一个会话之后,可使用PHP5的超级全局变量数组$_SESSION来存
6、储和取回Session中的变量。bool session_start(void)吉林省三扬科技咨询有限公司http:/Session的创建与销毁尽管断开与服务器的连接或者时间过期可自动销毁会话,但是有时是需要手工来销毁会话的,此时可使用session_unset()或session_destroy()函数。其中session_unset()函数的语法格式:session_unset()函数用于释放指定的Session变量,它不会完全删除会话,用法:session_destroy()函数会完全删除当前会话,它的语法格式:使用session_destroy()函数以后,当前会话将会失效,用法:vo
7、id session_unset(void)bool session_destroy(void)吉林省三扬科技咨询有限公司http:/Session的配置与应用在使用会话时,大部分控制都是由PHP的配置文件来完成的。PHP5共提供了25个会话配置指令负责会话处理功能,其中重要的23个有:1session.save_handler:该指令定义了存储和获取与会话相关联数据的处理器的名称,它可接受的参数有4个,分别为:files:文件,默认值为files。mm:共享内存。sqlite:SQLite数据库。user:用户自定义函数。2session.save_path;该指令定义了传递给存储处理器的参
8、数,如果处理器名为 files,则参数值为创建文件的路径。session.save_path指令的默认值为“/tmp”。在php.ini文件中,session.save_path指令还可以使用这种形式:session.save_path=N;/path可选参数 N用来决定会话文件分布的目录深度,其值为一个整数。需要注意的一点是要使用参数N,必须先创建好这些目录。吉林省三扬科技咨询有限公司http:/Session的配置与应用3session.use_cookies:该指令用来决定是否在客户端使用 cookie 来存放会话 ID,它接受两个值,分别为:1:表示启用,默认值为1。0:表示禁用。4s
9、ession.use_only_cookies:会话ID与某个用户相关联可通过两种途 径,一 种 是 使 用 Cookie,另 一 种 使 用 URL传 递。session.use_only_cookies指令用来决定是否在客户端只使用Cookie来 存 放 会 话 ID,而 放 弃 使 用 URL传 递。session.use_only_cookies指令接受两个值,分别为:1:表示只使用Cookie,默认值为1。0:表示同时使用Cookie和URL传递。当session.use_only_cookies指令的值设置成1时,可防止有关通过 URL 传递会话 ID 的攻击。吉林省三扬科技咨询有
10、限公司http:/Session的配置与应用5session.name:该指令用于指定发送到客户端的会话Cookie名,默认值为PHPSESSID。6session.auto_start:该指令用于指定是否在请求开始时自动启动一个会话,它接受两个值,分别为:1:表示在请求开始时自动启动一个会话。0:不会自动启动一个会话,需要用session_start()函数显式的启动,默认值为0。7session.cookie_lifetime:该指令指定了发送到浏览器的会话Cookie的生命周期,单位为秒,默认值是0。当值是0时,表示会话Cookie的生命周期直到浏览器被用户关闭为止。8session.c
11、ookie_path:该指令指定了会话 cookie 的有效路径,默认值为“/”。当值是“/”表示Cookie对当前网站下的所有路径都是有效的,若值为“/item”,则表示会话cookie只在网站下的item路径中才是有效的。吉林省三扬科技咨询有限公司http:/Session的配置与应用9session.cookie_domain:该指令指定了会话Cookie的有效域,默认值为空。使用这个指令可防止别的域非法读取自己的会话Cookie,以增强Cookie的安全性。若session.cookie_domain指令的值为空,表示将根据 Cookie规范生成Cookie的主机名。10session
12、.cookie_secure:该指令决定是否仅使用安全连接(https)来发送Cookie,默认值为off。11session.serialize_handler:该指令定义了序列化和逆序列化的处理器名,默认值为php(php是标准序列化和逆序列化处理器)。此外,PHP若启用了WDDX(Web开发数据交换)支持,还可使用wddx处理器。12session.gc_probability和session.gc_divisor:session.gc_probability指令和session.gc_divisor指令合起来定义在每次初始化会话时,启动垃圾回收程序的概率。其中session.gc_pr
13、obability指令作为分子部分,默认值为1。session.gc_divisor指令作为分母部分,默认值为100。吉林省三扬科技咨询有限公司http:/Session的配置与应用13session.gc_maxlifetime:该指令指定了过多长时间数据被视为“垃圾”并由垃圾回收程序清理,单位为秒,默认值是1440。它的判断依据是最后访问数据的时间,对于FAT文件系统则是最后修改数据的时间。如果多个脚本共享同一个session.save_path目录,将以所有session.gc_maxlifetime指令中的最小值为准。14session.referer_check:该指令用来验证HTT
14、P Referer中是否包含指定的字符串,如果包含则会话ID被视为有效,若不包含则会话ID将视为无效。它的默认值为空,表示全部视为有效。15session.bug_compat_42和session.bug_compat_warn:PHP 4.2.3以及之前的的版本有一个未注明的特性或者BUG,它允许用户在 register_globals 被禁用的情况下也可以初始化全局Session变量,如果在PHP4.3以及更新版本中使用这个特性,并且同时开启了session.bug_compat_42和session.bug_compat_warn指令会显示警告信息。session.bug_compat
15、_42和session.bug_compat_warn的默认值都为1,表示开启。吉林省三扬科技咨询有限公司http:/Session的配置与应用16session.entropy_file:该指令来指向提供一个外部资源(文件),该资源(文件)会集成到会话ID的生成过程中。session.entropy_file指令的默认值为空。17session.entropy_length:该指令指定了从外部资源(文件)读取的字节数。默认值为0,表示禁用。18session.cache_limiter:该指令指定了会话页面所使用的缓冲控制模式,以此决定客户端和中间代理如何缓存页面内容。它接受五个值,分别为:
16、nocache:表示无缓存,禁止客户端和中间代理缓存页面。默认值为nocache。none:阻止在HTTP头中发送禁用缓存的命令。public:客户端和中间代理都可缓存页面private:客户端可缓存页面,中间代理禁止缓存页面。private_no_expire:在private模式下,一些浏览器不能正确处理expire 头,使用private_no_expire就可以解决这个问题。在private_no_expire模式下,expire头将不会往客户端发送。吉林省三扬科技咨询有限公司http:/Session的配置与应用19session.cache_expire:该指令指定了会话页面在客户
17、端cache中的有效时间,单位是分钟,默认值为180。当缓存模式为nocache时,此指令无效。20session.use_trans_sid:该指令确定在URL中传递会话ID时是否使用明码显示,默认值为0,表示禁止使用。设置成1,表示允许使用。21session.hash_function:该指令指定了生成会话ID的散列算法,它接受两个值:1:代表使用SHA-1(160 位)算法。0:代表使用MD5(128 位)算法。默认值为0。吉林省三扬科技咨询有限公司http:/Session的配置与应用22session.hash_bits_per_character:当会话ID由二进制散列数据转换成
18、可读的字符串格式时,session.hash_bits_per_character指令指定了每个字符存放多少个bit,它接受3个值,分别为:4:代表转换以后得到一个由0-9和a-f组成的32字符长的字符串。默认值为4。5:代表转换以后得到一个由0-9和a-v组成的26字符长的字符串。6:代表转换以后得到一个由0-9、a-f、A-Z、“-“和“,“组成的22字符长的字符串。23url_rewriter.tags:当session.use_trans_sid 指令处于启用状态时,使用url_rewriter.tags指令可指定重写哪些 HTML 标签来加入会话ID。其默认值为“a=href,are
19、a=href,frame=src,input=src,form=,fieldset=“。吉林省三扬科技咨询有限公司http:/Session 中的存取对象与应用数组在PHP5之前的版本,会话只能处理一些简单数据类型,比如整型、字符串、浮点型等。自PHP5版本开始,引进了对象串行化机制,PHP开始允许在Session中存取对象。在Session中存取对象的优点就是可把大量数据存放在一个对象中,利用Session可容易的实现在不同的页面间进行大量数据的传递。我们已经知道,使用超级全局变量数组$_SESSION来存储和取回Session中的变量,那么在应用程序中就可以像操作数组一样来操作Sessio
20、n,或将Session作为一个二维数组,输出其中部分内容。吉林省三扬科技咨询有限公司http:/Session 的共享与安全通常情况下,一个大型网站往往要架设多台服务器以运行不同功能的模块。根据Session的实现原理可知,在默认情况下,PHP 的Session数据都是分别以文本形式保存在当前服务器下。再者,各个服务器会各自分别对同一个客户端生成 SID,如对于同一个用户,A 服务器产生的 SID 是ef024a7b15365e156a6ce8b8819e747c,而B服务器生成的则是3c3faf23b5b3c2a516ceffa69df229b0。鉴于上面两种情况,当同一个用户访问网站的的不
21、同模块时,会因为SID的不同和Session数据不能相互访问而给用户带来一些不必要的麻烦,比如由一个网页转到另一个网页时需要重新登录等等。如何才能实现Session的共享呢?首先是保证每个服务器对同一个客户端产生相同的SID,并且可通过同一个Cookie 进行传递,即每个服务器必须可以读取同一个名为 PHPSESSID 的Cookie,其次就是共享Session文件中的数据。要使各个服务器共享同一客户端 SID,需要对Cookie 的域(domain)进行一定的设置,默认情况下,Cookie 的域是当前服务器的域名或者IP地址,而域不同的话,各个服务器所设置的Cookie是不能相互访问的,也就
22、是说http:/ 的服务器是不能读写http:/服务器设置的Cookie 的。但是对同一个网站而言,它的各个服务器是属于同一个一级域的,如:http:/ 的共享与安全SID的问题解决后,另一个就是Session文件的共享了。我们可选择使用数据库来保存 SESSION 数据,这样各个服务器就可以方便地访问同一个数据源,获取相同的 SESSION 数据了。我们已经知道,默认情况下PHP 的Session数据都是以文本形式保存的,若使用数据库存储,则需要修改session.save_handler指令的值,在php.ini文件中对session.save_handler指令的配置如下:session
23、.save_handler=user吉林省三扬科技咨询有限公司http:/Session 的共享与安全Session存在不安全的因素,Session是针对单个用户的,区分哪个用户的Session是依据SID来判断的,在客户端请求时,服务端会将SID发送到客户端并写入Cookie,因此SID有被拦截盗用的风险。若用户的有效会话ID被非法用户获得,它们就有可能能够在系统中拥有与此用户相同的能力。为了防止SID被攻击者盗取,可使用session_regenerate_id()函数来重新生成SID,例如:吉林省三扬科技咨询有限公司http:/提高Session的效率默认情况下,PHP的Session会
24、以文本形式存储在服务器端,如果系统访问量过大,就会在Session目录下生成许多临时文件,当这些文件放在同一个目录下时,势必会因为文件过多而带来IO性能下降,并容易受到攻击。如何解决同一个目录下Session文件过多带来的读写效率问题呢?在PHP的配置文件php.ini中有如下的一个配置指令:;session.save_path=N;/path利用上面指令可解决Session多级存放的问题。session.save_path指令定义了传递给存储处理器的参数,若处理器名为 files,其参数值则为创建文件的路径。当session.save_path指令中带有一个N 参数时可决定会话文件分布的目录
25、深度。带有N 参数的session.save_path指令默认是关闭的,使用时需要将其开启:session.save_path=2;/mysession/tmp把N设置成2表示将Session文件分成两级存放,每一级目录名分别由0-9和a-z共36个字母数字组合而成,那么存放Session文件的目录将达到36*36个。根据实际情况可将N设置成3甚至更多,以满足系统对目录的需求。吉林省三扬科技咨询有限公司http:/方案二使用CookieCookie简介Cookie的工作原理创建与删除Cookie解决Cookie中常见的问题吉林省三扬科技咨询有限公司http:/Cookie简介Cookie是指某
26、些网站为了辨别用户身份而储存在用户本地终端上的数据,它以小文本文件的形式存储在客户端。Cookie中可以包含有关用户的信息,如身份识别号码、密码、用户在Web站点购物的方式或用户访问该站点的次数等。无论用户何时连接到服务器,Web站点都可以访问Cookie信息。Cookie按其种类的不同可以分为临时Cookie和永久Cookie。临时 Cookie又称为会话 Cookie,它仅为当前浏览的对话存储,一旦超过规定的时间或者关闭 Internet Explorer 时就会被系统清除。永久 Cookie 以文件形式存储在计算机上,关闭 Internet Explorer 时仍然保留在计算机上。再次访
27、问该站点时,创建该 Cookie 的网站仍然可以对它进行调用。吉林省三扬科技咨询有限公司http:/Cookie简介通常,对于Windows2000和WindowsXP操作系统,Cookie文件保存在“C:Documents and Settings用户名Local SettingsTemporary Internet Files”路径下,文件名组成为usernamedomainname,其中username为登录网站的用户名,domainname为网站的域名。因为Cookie存储在用户的计算机上,因此它们可能会带来一定的安全问题,许多浏览都提供了对Cookie的灵活性控制功能,甚至还可以屏蔽
28、掉Cookie。但是Cookie也并非不安全,这取决于编程人员对Cookie的正确使用,而且,如果完全禁止了Cookie,就再也无法使用许多网站的某些功能了吉林省三扬科技咨询有限公司http:/Cookie的工作原理Cookie是HTTP header的一部分,Cookie通过HTTP Headers从服务器端返回到浏览器上,服务器端在响应中利用Set-Cookie header来创建一个Cookie,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且让它返回至服务器,从而完成浏览器的认证。例如,我们创建了一个名字为login的Cookie来包含访问者的信息,
29、创建Cookie时,服务器端的Header 如下面代码所示,这里假设访问者的注册名是“Michael Jordan”,同时还对所创建的Cookie的属性如path、domain、expires等进行了指定。Set-Cookie:login=Michael Jordan;path=/;domain=;expires=Monday,01-Mar-99 00:00:01 GMT上面这个Header会自动在浏览器端计算机的Cookie文件中添加一条记录。浏览器将变量名为“login”的Cookie赋值为“Michael Jordon”。注意:在实际传递过程中这个Cookie的值是经过了URLEncod
30、e方法的URL编码操作的。这个含有Cookie值的HTTP Header被保存到浏览器的Cookie文件后,Header就通知浏览器将Cookie通过请求以忽略路径的方式返回到服务器,完成浏览器的认证操作。吉林省三扬科技咨询有限公司http:/Cookie的工作原理此外,我们使用了Cookie的一些属性来限定该Cookie的使用。例如Domain属性能够在浏览器端对Cookie发送进行限定,具体到上面的例子,该Cookie只能传达到指定的服务器上,而决不会跑到其它的如的Web站点上去。Expires属性则指定了该 Cookie保存的时间期限,例如上面的Cookie在浏览器上只保存到1999年3
31、月1日1秒。当然,如果浏览器上Cookie 太多,超过了系统所允许的范围,浏览器将自动对它进行删除。至于属性Path,用来指定Cookie将被发送到服务器的哪一个目录路径下。浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其它网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。吉林省三扬科技咨询有限公司http:/创建与删除Cookie在PHP中创建Cookie是使用setcookie()函数实现的,该函数的语法格式如下:bool setcookie(string name,string
32、 value,int expire,string path,string domain,int secure)参数 描述 name Cookie的名称,利用此名称并可访问Cookie value Cookie的值expireCookie的过期时间pathCookie的有效目录domainCookie的有效域secureCookie在一个未启用SSL的脚本中是否可读吉林省三扬科技咨询有限公司http:/创建与删除Cookie通常情况下在创建Cookie时,如果为Cookie指定了过期时间,Cookie会在过期时间后自动销毁,但是有时候用户希望能手动删除Cookie。删除Cookie非常的简单,只
33、需创建一个同名的Cookie,并将其值设置为空即可。吉林省三扬科技咨询有限公司http:/解决Cookie中常见的问题1浏览器对Cookie的支持大多数浏览都提供了对Cookie的灵活性控制功能,而且有的用户为了安全,会将Cookie在浏览器中屏蔽掉,因此在程序中应检测浏览器是否提供了对Cookie的支持。2.在创建Cookie前输出HTML文件内容在使用Cookie时,一条常见的警告信息如图:出现这条警告信息的原因是因为在调用setcookie()函数之前,有HTML文件的内容输出,因此,在创建Cookie时应确保在此之前无任何输出。3Cookie的限制一个浏览器能创建的Cookie数量最多
34、为30个,并且每个不能超过4KB,每个Web站点能设置的Cookie总数不能超过20个。吉林省三扬科技咨询有限公司http:/购物车系统在项目实战中我们将实现一个简单的购物车系统。购物车是网络商城中一个非常重要的工具,它和现实中超市的购物车功能类似,当用户在网站上浏览不同的商品时,若发现自己喜爱的商品,单击【加入购物车】,该商品就会放入购物车中,单击【继续购物】,可重复选购商品,最后将选中的所有商品放在购物车中统一到付款台结账。实现购物车的前提条件是必须让服务器记住是谁在购买商品,以及当把商品加入购物车时,需要知道购物车里原先存放的商品。虽然HTTP是一种“无状态”的协议,但是PHP提供的Session则可以保存和跟踪用户的状态信息。吉林省三扬科技咨询有限公司http:/购物车系统功能演示1显示商品信息在显示商品信息的页面中,用户可一次性选购多种商品,单击【加入购物车】,就会将自己选购的商品放入购物车中。吉林省三扬科技咨询有限公司http:/购物车系统功能演示2显示购物车中的商品在购物车中,可显示用户选购的所有商品和商品的总数量,同时单击【继续购物】链接,则页面跳转到显示商品信息页面,用户可继续购买商品。吉林省三扬科技咨询有限公司http:/