网页编程语言学习第8章.ppt

上传人:sh****n 文档编号:7445698 上传时间:2020-03-21 格式:PPT 页数:33 大小:321.50KB
返回 下载 相关 举报
网页编程语言学习第8章.ppt_第1页
第1页 / 共33页
网页编程语言学习第8章.ppt_第2页
第2页 / 共33页
网页编程语言学习第8章.ppt_第3页
第3页 / 共33页
点击查看更多>>
资源描述
会话 吉林省三扬科技咨询有限公司 课程内容 课程内容会话管理的解决方案 Session与Cookie方案一 使用Session方案二 使用Cookie购物车系统 吉林省三扬科技咨询有限公司 会话管理的解决方案 Session与Cookie 在Web服务器端编程中 会话状态管理是一个很重要的方面 我们知道HTTP是一种无状态 Stateless 的协议 它无法区分当前的一连串请求是来自相同的客户端还是不同的客户端 或者客户端是处于连接状态还是断开状态 正是由于HTTP协议的无状态特点 因此而带来了一系列的问题 比如在某段时间内有许多用户登录网上银行帐号 它们各自进行着买卖基金 转帐 查询余额等不同的业务 如果服务器不能记住用户的身份 就可能出现刚买的基金存进了其它人的帐号 转帐失误等许多未知的后果 再如通过在线商店购物时 由于服务器不能记住以前的事务 当我们把商品加入购物车时 服务器不知道购物车里原先有些什么 不能记住客户都买了什么商品 因此购物车的功能将无法实现 吉林省三扬科技咨询有限公司 会话管理的解决方案 Session与Cookie 那么如何才能实现会话状态呢 在PHP中 通常有以下两种解决方案 Session 中文翻译为 会话 指用户访问网页到与服务器断开连接的一个时间段 Session的功能是跟踪用户状态 存储整个会话过程中保持其状态的信息 Cookie Cookie是一个小文本文件 该文件里面记录了会话信息并存储在客户端 吉林省三扬科技咨询有限公司 方案一 使用Session Session简介Session的创建与销毁Session的配置与应用Session中的存取对象与应用数组Session的共享与安全提高Session的效率 吉林省三扬科技咨询有限公司 Session简介 Session是什么呢 通常在中文里翻译为 会话 由于网页是一种无状态的连接程序 因此无法得知用户的浏览状态 所以我们必须通过Session来记录用户的有关信息 以供用户再次以此身份对Web服务器提供要求时作确认 Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间 每一访问者都会单独获得一个Session 在Web应用程序中 当一个用户访问该应用时 Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据 如果另一个用户也同时访问该Web应用 他也拥有自己的Session变量 两个用户之间无法通过Session变量共享信息 吉林省三扬科技咨询有限公司 Session简介 在PHP中 Session由一种能够存储用户发出的请求状态信息的方法组成 当用户每次访问网站时 都会为每个访问者创建一个唯一的标识符来区分客户的身份 这个标识符被称为会话ID SID 其实SID就是Session文件的文件名 具有唯一性和随机性 以确保Session的安全 若客户端未禁用Cookie SID存储在Cookie 称为会话Cookie 中 否则使用URL来传递SID 吉林省三扬科技咨询有限公司 Session的创建与销毁 在PHP5中 使用session start 函数来创建一个会话状态 同时意味着会话的开始 session start 函数的语法格式 如果拥有会话ID session start 函数将会继续当前会话 否则创建一个新会话 并为用户会话分配一个会话ID 开始一个会话之后 可使用PHP5的超级全局变量数组 SESSION 来存储和取回Session中的变量 吉林省三扬科技咨询有限公司 Session的创建与销毁 尽管断开与服务器的连接或者时间过期可自动销毁会话 但是有时是需要手工来销毁会话的 此时可使用session unset 或session destroy 函数 其中session unset 函数的语法格式 session unset 函数用于释放指定的Session变量 它不会完全删除会话 用法 session destroy 函数会完全删除当前会话 它的语法格式 使用session destroy 函数以后 当前会话将会失效 用法 吉林省三扬科技咨询有限公司 Session的配置与应用 在使用会话时 大部分控制都是由PHP的配置文件来完成的 PHP5共提供了25个会话配置指令负责会话处理功能 其中重要的23个有 1 session save handler 该指令定义了存储和获取与会话相关联数据的处理器的名称 它可接受的参数有4个 分别为 files 文件 默认值为files mm 共享内存 sqlite SQLite数据库 user 用户自定义函数 2 session save path 该指令定义了传递给存储处理器的参数 如果处理器名为files 则参数值为创建文件的路径 session save path指令的默认值为 tmp 在php ini文件中 session save path指令还可以使用这种形式 session save path N path 可选参数N用来决定会话文件分布的目录深度 其值为一个整数 需要注意的一点是要使用参数N 必须先创建好这些目录 吉林省三扬科技咨询有限公司 Session的配置与应用 3 session use cookies 该指令用来决定是否在客户端使用cookie来存放会话ID 它接受两个值 分别为 1 表示启用 默认值为1 0 表示禁用 4 session 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的攻击 吉林省三扬科技咨询有限公司 Session的配置与应用 5 session name 该指令用于指定发送到客户端的会话Cookie名 默认值为PHPSESSID 6 session auto start 该指令用于指定是否在请求开始时自动启动一个会话 它接受两个值 分别为 1 表示在请求开始时自动启动一个会话 0 不会自动启动一个会话 需要用session start 函数显式的启动 默认值为0 7 session cookie lifetime 该指令指定了发送到浏览器的会话Cookie的生命周期 单位为秒 默认值是0 当值是0时 表示会话Cookie的生命周期直到浏览器被用户关闭为止 8 session cookie path 该指令指定了会话cookie的有效路径 默认值为 当值是 表示Cookie对当前网站下的所有路径都是有效的 若值为 item 则表示会话cookie只在网站下的item路径中才是有效的 吉林省三扬科技咨询有限公司 Session的配置与应用 9 session cookie domain 该指令指定了会话Cookie的有效域 默认值为空 使用这个指令可防止别的域非法读取自己的会话Cookie 以增强Cookie的安全性 若session cookie domain指令的值为空 表示将根据Cookie规范生成Cookie的主机名 10 session cookie secure 该指令决定是否仅使用安全连接 https 来发送Cookie 默认值为off 11 session serialize handler 该指令定义了序列化和逆序列化的处理器名 默认值为php php是标准序列化和逆序列化处理器 此外 PHP若启用了WDDX Web开发数据交换 支持 还可使用wddx处理器 12 session gc probability和session gc divisor session gc probability指令和session gc divisor指令合起来定义在每次初始化会话时 启动垃圾回收程序的概率 其中session gc probability指令作为分子部分 默认值为1 session gc divisor指令作为分母部分 默认值为100 吉林省三扬科技咨询有限公司 Session的配置与应用 13 session gc maxlifetime 该指令指定了过多长时间数据被视为 垃圾 并由垃圾回收程序清理 单位为秒 默认值是1440 它的判断依据是最后访问数据的时间 对于FAT文件系统则是最后修改数据的时间 如果多个脚本共享同一个session save path目录 将以所有session gc maxlifetime指令中的最小值为准 14 session referer check 该指令用来验证HTTPReferer中是否包含指定的字符串 如果包含则会话ID被视为有效 若不包含则会话ID将视为无效 它的默认值为空 表示全部视为有效 15 session bug compat 42和session bug compat warn PHP4 2 3以及之前的的版本有一个未注明的特性或者 BUG 它允许用户在register globals被禁用的情况下也可以初始化全局Session变量 如果在PHP4 3以及更新版本中使用这个特性 并且同时开启了session bug compat 42和session bug compat warn指令会显示警告信息 session bug compat 42和session bug compat warn的默认值都为1 表示开启 吉林省三扬科技咨询有限公司 Session的配置与应用 16 session entropy file 该指令来指向提供一个外部资源 文件 该资源 文件 会集成到会话ID的生成过程中 session entropy file指令的默认值为空 17 session entropy length 该指令指定了从外部资源 文件 读取的字节数 默认值为0 表示禁用 18 session cache limiter 该指令指定了会话页面所使用的缓冲控制模式 以此决定客户端和中间代理如何缓存页面内容 它接受五个值 分别为 nocache 表示无缓存 禁止客户端和中间代理缓存页面 默认值为nocache none 阻止在HTTP头中发送禁用缓存的命令 public 客户端和中间代理都可缓存页面private 客户端可缓存页面 中间代理禁止缓存页面 private no expire 在private模式下 一些浏览器不能正确处理expire头 使用private no expire就可以解决这个问题 在private no expire模式下 expire头将不会往客户端发送 吉林省三扬科技咨询有限公司 Session的配置与应用 19 session cache expire 该指令指定了会话页面在客户端cache中的有效时间 单位是分钟 默认值为180 当缓存模式为nocache时 此指令无效 20 session use trans sid 该指令确定在URL中传递会话ID时是否使用明码显示 默认值为0 表示禁止使用 设置成1 表示允许使用 21 session hash function 该指令指定了生成会话ID的散列算法 它接受两个值 1 代表使用SHA 1 160位 算法 0 代表使用MD5 128位 算法 默认值为0 吉林省三扬科技咨询有限公司 Session的配置与应用 22 session hash bits per character 当会话ID由二进制散列数据转换成可读的字符串格式时 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字符长的字符串 23 url rewriter tags 当session use trans sid指令处于启用状态时 使用url rewriter tags指令可指定重写哪些HTML标签来加入会话ID 其默认值为 a href area href frame src input src form fieldset 吉林省三扬科技咨询有限公司 Session中的存取对象与应用数组 在PHP5之前的版本 会话只能处理一些简单数据类型 比如整型 字符串 浮点型等 自PHP5版本开始 引进了对象串行化机制 PHP开始允许在Session中存取对象 在Session中存取对象的优点就是可把大量数据存放在一个对象中 利用Session可容易的实现在不同的页面间进行大量数据的传递 我们已经知道 使用超级全局变量数组 SESSION 来存储和取回Session中的变量 那么在应用程序中就可以像操作数组一样来操作Session 或将Session作为一个二维数组 输出其中部分内容 吉林省三扬科技咨询有限公司 Session的共享与安全 通常情况下 一个大型网站往往要架设多台服务器以运行不同功能的模块 根据Session的实现原理可知 在默认情况下 PHP的Session数据都是分别以文本形式保存在当前服务器下 再者 各个服务器会各自分别对同一个客户端生成SID 如对于同一个用户 A服务器产生的SID是ef024a7b15365e156a6ce8b8819e747c 而B服务器生成的则是3c3faf23b5b3c2a516ceffa69df229b0 鉴于上面两种情况 当同一个用户访问网站的的不同模块时 会因为SID的不同和Session数据不能相互访问而给用户带来一些不必要的麻烦 比如由一个网页转到另一个网页时需要重新登录等等 如何才能实现Session的共享呢 首先是保证每个服务器对同一个客户端产生相同的SID 并且可通过同一个Cookie进行传递 即每个服务器必须可以读取同一个名为PHPSESSID的Cookie 其次就是共享Session文件中的数据 要使各个服务器共享同一客户端SID 需要对Cookie的域 domain 进行一定的设置 默认情况下 Cookie的域是当前服务器的域名或者IP地址 而域不同的话 各个服务器所设置的Cookie是不能相互访问的 也就是说的服务器是不能读写服务器设置的Cookie的 但是对同一个网站而言 它的各个服务器是属于同一个一级域的 如 吉林省三扬科技咨询有限公司 Session的共享与安全 SID的问题解决后 另一个就是Session文件的共享了 我们可选择使用数据库来保存SESSION数据 这样各个服务器就可以方便地访问同一个数据源 获取相同的SESSION数据了 我们已经知道 默认情况下PHP的Session数据都是以文本形式保存的 若使用数据库存储 则需要修改session save handler指令的值 在php ini文件中对session save handler指令的配置如下 session save handler user 吉林省三扬科技咨询有限公司 Session的共享与安全 Session存在不安全的因素 Session是针对单个用户的 区分哪个用户的Session是依据SID来判断的 在客户端请求时 服务端会将SID发送到客户端并写入Cookie 因此SID有被拦截盗用的风险 若用户的有效会话ID被非法用户获得 它们就有可能能够在系统中拥有与此用户相同的能力 为了防止SID被攻击者盗取 可使用session regenerate id 函数来重新生成SID 例如 吉林省三扬科技咨询有限公司 提高Session的效率 默认情况下 PHP的Session会以文本形式存储在服务器端 如果系统访问量过大 就会在Session目录下生成许多临时文件 当这些文件放在同一个目录下时 势必会因为文件过多而带来IO性能下降 并容易受到攻击 如何解决同一个目录下Session文件过多带来的读写效率问题呢 在PHP的配置文件php ini中有如下的一个配置指令 session save path N path 利用上面指令可解决Session多级存放的问题 session save path指令定义了传递给存储处理器的参数 若处理器名为files 其参数值则为创建文件的路径 当session save path指令中带有一个N参数时可决定会话文件分布的目录深度 带有N参数的session save path指令默认是关闭的 使用时需要将其开启 session save path 2 mysession tmp 把N设置成2表示将Session文件分成两级存放 每一级目录名分别由0 9和a z共36个字母数字组合而成 那么存放Session文件的目录将达到36 36个 根据实际情况可将N设置成3甚至更多 以满足系统对目录的需求 吉林省三扬科技咨询有限公司 方案二 使用Cookie Cookie简介Cookie的工作原理创建与删除Cookie解决Cookie中常见的问题 吉林省三扬科技咨询有限公司 Cookie简介 Cookie是指某些网站为了辨别用户身份而储存在用户本地终端上的数据 它以小文本文件的形式存储在客户端 Cookie中可以包含有关用户的信息 如身份识别号码 密码 用户在Web站点购物的方式或用户访问该站点的次数等 无论用户何时连接到服务器 Web站点都可以访问Cookie信息 Cookie按其种类的不同可以分为临时Cookie和永久Cookie 临时Cookie又称为会话Cookie 它仅为当前浏览的对话存储 一旦超过规定的时间或者关闭InternetExplorer时就会被系统清除 永久Cookie以文件形式存储在计算机上 关闭InternetExplorer时仍然保留在计算机上 再次访问该站点时 创建该Cookie的网站仍然可以对它进行调用 吉林省三扬科技咨询有限公司 Cookie简介 通常 对于Windows2000和WindowsXP操作系统 Cookie文件保存在 C DocumentsandSettings 用户名 LocalSettings TemporaryInternetFiles 路径下 文件名组成为username domainname 其中username为登录网站的用户名 domainname为网站的域名 因为Cookie存储在用户的计算机上 因此它们可能会带来一定的安全问题 许多浏览都提供了对Cookie的灵活性控制功能 甚至还可以屏蔽掉Cookie 但是Cookie也并非不安全 这取决于编程人员对Cookie的正确使用 而且 如果完全禁止了Cookie 就再也无法使用许多网站的某些功能了 吉林省三扬科技咨询有限公司 Cookie的工作原理 Cookie是HTTPheader的一部分 Cookie通过HTTPHeaders从服务器端返回到浏览器上 服务器端在响应中利用Set Cookieheader来创建一个Cookie 浏览器在它的请求中通过Cookieheader包含这个已经创建的Cookie 并且让它返回至服务器 从而完成浏览器的认证 例如 我们创建了一个名字为login的Cookie来包含访问者的信息 创建Cookie时 服务器端的Header如下面代码所示 这里假设访问者的注册名是 MichaelJordan 同时还对所创建的Cookie的属性如path domain expires等进行了指定 Set Cookie login MichaelJordan path domain expires Monday 01 Mar 9900 00 01GMT上面这个Header会自动在浏览器端计算机的Cookie文件中添加一条记录 浏览器将变量名为 login 的Cookie赋值为 MichaelJordon 注意 在实际传递过程中这个Cookie的值是经过了URLEncode方法的URL编码操作的 这个含有Cookie值的HTTPHeader被保存到浏览器的Cookie文件后 Header就通知浏览器将Cookie通过请求以忽略路径的方式返回到服务器 完成浏览器的认证操作 吉林省三扬科技咨询有限公司 Cookie的工作原理 此外 我们使用了Cookie的一些属性来限定该Cookie的使用 例如Domain属性能够在浏览器端对Cookie发送进行限定 具体到上面的例子 该Cookie只能传达到指定的服务器上 而决不会跑到其它的如的Web站点上去 Expires属性则指定了该Cookie保存的时间期限 例如上面的Cookie在浏览器上只保存到1999年3月1日1秒 当然 如果浏览器上Cookie太多 超过了系统所允许的范围 浏览器将自动对它进行删除 至于属性Path 用来指定Cookie将被发送到服务器的哪一个目录路径下 浏览器创建了一个Cookie后 对于每一个针对该网站的请求 都会在Header中带着这个Cookie 不过 对于其它网站的请求Cookie是绝对不会跟着发送的 而且浏览器会这样一直发送 直到Cookie过期为止 吉林省三扬科技咨询有限公司 创建与删除Cookie 在PHP中创建Cookie是使用setcookie 函数实现的 该函数的语法格式如下 吉林省三扬科技咨询有限公司 创建与删除Cookie 通常情况下在创建Cookie时 如果为Cookie指定了过期时间 Cookie会在过期时间后自动销毁 但是有时候用户希望能手动删除Cookie 删除Cookie非常的简单 只需创建一个同名的Cookie 并将其值设置为空即可 吉林省三扬科技咨询有限公司 解决Cookie中常见的问题 1 浏览器对Cookie的支持大多数浏览都提供了对Cookie的灵活性控制功能 而且有的用户为了安全 会将Cookie在浏览器中屏蔽掉 因此在程序中应检测浏览器是否提供了对Cookie的支持 2 在创建Cookie前输出HTML文件内容在使用Cookie时 一条常见的警告信息如图 出现这条警告信息的原因是因为在调用setcookie 函数之前 有HTML文件的内容输出 因此 在创建Cookie时应确保在此之前无任何输出 3 Cookie的限制一个浏览器能创建的Cookie数量最多为30个 并且每个不能超过4KB 每个Web站点能设置的Cookie总数不能超过20个 吉林省三扬科技咨询有限公司 购物车系统 在项目实战中我们将实现一个简单的购物车系统 购物车是网络商城中一个非常重要的工具 它和现实中超市的购物车功能类似 当用户在网站上浏览不同的商品时 若发现自己喜爱的商品 单击 加入购物车 该商品就会放入购物车中 单击 继续购物 可重复选购商品 最后将选中的所有商品放在购物车中统一到付款台结账 实现购物车的前提条件是必须让服务器记住是谁在购买商品 以及当把商品加入购物车时 需要知道购物车里原先存放的商品 虽然HTTP是一种 无状态 的协议 但是PHP提供的Session则可以保存和跟踪用户的状态信息 吉林省三扬科技咨询有限公司 购物车系统功能演示 1 显示商品信息在显示商品信息的页面中 用户可一次性选购多种商品 单击 加入购物车 就会将自己选购的商品放入购物车中 吉林省三扬科技咨询有限公司 购物车系统功能演示 2 显示购物车中的商品在购物车中 可显示用户选购的所有商品和商品的总数量 同时单击 继续购物 链接 则页面跳转到显示商品信息页面 用户可继续购买商品
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!