1. 云栖社区>
  2. PHP教程>
  3. 正文

用 PHPLIB 进行 Session 的管理和认证

作者:用户 来源:互联网 时间:2017-12-01 16:10:54

管理session认证进行phplib

用 PHPLIB 进行 Session 的管理和认证 - 摘要: 本文讲的是用 PHPLIB 进行 Session 的管理和认证,PHPLIB还可以做很多别的事情,例如数据库类。本篇文章只是对PHPLIB的简单介绍。有很多类和功能都没有 提到。你可以到http://phplib.netuse.de去获取更多的帮助文档 测试环境:标准环境   首先要说明一个事实,用We

PHPLIB还可以做很多别的事情,例如数据库类。本篇文章只是对PHPLIB的简单介绍。有很多类和功能都没有 提到。你可以到http://phplib.netuse.de去获取更多的帮助文档 测试环境:标准环境   首先要说明一个事实,用Web页面设计需要保存客户当前状态的程序时极为不便,例如在线Shopping,作为一 名程序员,你必须时时面对在各个主页之间传递的状态参数。客户的身份认证、他已做出的选择、他当前的状态 等等,Web主页并不会替你保存这些状态信息,你必须自己小心处理这些参数,这给我们带来了太多的不便,利用 http://url?var1=x1&var2=x2 来在主页间传送参数实在太危险,尤其是变量中包含用户注册信息时很容易被 sniff,那么,我们如何解决这个问题呢。   PHPLIB解决了这个问题,它是在PHP3上的一个扩展,提供了很多类库,使得程序员能很容易地建立一个交互 式Web站点,PHPLIB最基本的功能包括用户认证,Session管理,权限及数据库的抽象化。   安装PHPLIB前你必须在你的服务器上先安装好php3,PHPLIB可以运行在Cgi方式或apache附加模块方式。PHP3 的版本必须时在3.0.5之上,PHP3早期版本可以在编译时使用参数 --enable-foce-cgi-redirect来获得支持,如 果不这么做的话,会出现安全问题。PHP3的配置中 track_vars 需要设置为 enabled。同时需要一个数据库, PHPLIB支持MySQL、Oracle、ODBC、PostgreSQL、Sybase。   第一步,PHPLIB的类库需要根据系统进行初始化,你可以修改local.inc文件,其中包含着一些基本参数,你 可以根据自己机器的情况来进行修改。   我们说明一下PHPLIB的工作原理,每一个使用PHPLIB的页面首先必须可以找到运行PHPLIB的必须类库文件, 我们可以在php3.ini中设置auto_prepend变量来支持,PHPLIB分发包中包含一个prepend.php3文件,将 auto_prepend指定为prepend.php3后,各页面就会自动包含PHPLIB类库,我们还可以将PHPLIB类库所在目录加进 include变量中,以便可以找到这些文件,当然,最苯的办法就是指定绝对路径,这可不是个好主意。 第二步,每一个使用PHPLIB的页面中,你必须使用函数page_open进行初始化。这会告诉PHPLIB,你现在或将来会 用到状态保存。一个典型的page_open例子包含到了认证、Session、权限: < ?php page_open(array( "sess" => "Cms_Session", "auth" => "Cms_Auth", "perm" => "Cms_Perm")); ?>   数组变量(sess,auth,perm)用来初始化一些状态保存对象,注意:必须使用PHPLIB内置名 (sess,auth,perm),这些内置名是你在local.ini中所定义的,page_open函数必须在页面内容输出到浏览器之前 被调用。(如果你将来不会用到认证的话,可以不初始化sess),php3脚本最后应以page_close()结束,这将会 将有关状态数据写回到数据库中,如果你忘了的话,将会,哈哈哈。。。   因为PHPLIB使用了Cookies来保存状态信息,所以page_open()函数必须在页面内容输出到浏览器之前被调 用, 这里的页面内容可以是任何HTML信息或者空行,如果你发现了错误"Oops - SetCookie called after header has been sent",这表明在page_open()之前向浏览器输出了些什么,你要特别留意空行,因为非常难找 到,典型的错误是在< ? 和 ?>标记之间输出了空行,你应检查在local.inc和prepend.php3文件中是否包含了空 行,这也是一个非常容易出错的地方。   PHP使用了一种比基本认证方法更为复杂的架构,这使得安全有了更好的保证。   举例来说,对于你想要限制访问的页面,会首先使用page_open来调用"auth" => "auth_class" ,初始化认 证状态对象后,状态就会被保存起来,随后当客户再访问别的页面的时候,认证系统就会首先检测用户的身份是 否已经经过认证。   让我们解释一下,当一个用户第一次访问页面时,他的身份未经过认证,PHPLIB会调用一个注册窗口(并非 在WINDOWS中的弹出窗口),你可以自己设计注册窗口的样式,当用户输入他的用户名与口令,并按下提交钮后, 身份认证工作就开始了,随后的情况有些复杂,让我们慢慢解释……   这里分两种情况,如果用户的浏览器不能兼容JavaScript的话,认证工作就象询问嫌疑犯一样,用户名与口 令被送往服务器,与存放在那里的数据进行比较。如果用户的浏览器与JavaScript兼容,这就麻烦一些了, PHPLIB首先会在客户端的页面中放入一个用来加密的种子字串,名叫“challenge”,当用户提交该页面时,用户 的用户名、口令和challenge字串会使用md5的加密方式进行加密,生成一个加密字串,将该加密字串与用户名提 交给服务器。当服务器收到用户名和加密后的字串后,他根据数据库中的用户名与口令和得到的种子进行md5运 算,将生成的字串与用户提交的字串进行比较,如果符合的话,说明用户身份是正确的,就允许用户进行随后的 访问。这种方法的好处是:用户不用提交密码,这使得认证比较安全。   Session 管理   其实Session的管理和身份认证非常接近,当一个用户的身份认证过了后,随即用户的session就开始了,如 果用户的浏览器支持cookie的话,将会建立一个session的id放入cookie,这个唯一的ID是由PHP3随机生成,然后 又用随机种子 字串进行md5加密过了的,这里的cookie应该叫做session cookie,因为这个cookie是不会写到用户硬盘里去的, 当一个session进行完的时候,该cookie也被完结了。如果用户浏览器不支持cookie的话,那么 该session的id将 会放入url链中,因为是加密过的,所以窃取了也没用。session id存放着用户的有关信息,如用户已认证、认证 到期时间、用户权限,和其他一些你可能需要的信息,方便我们取用。   Session其实就是用户一次会话的过程。Session的管理并不是仅仅用来跟踪用户的注册,实际上,它还可以 脱离认证来使用,你可以用它来存储任何你想要存贮的信息,这些信息可以在用户随后访问的页面中派上用场, 当然前提是那些页面要使用PHPLIB。方法很简单,注册一个变量后即可在随后的页面中使用它,直至session结 束。方法: < ?php $sess->register( "variable_name"); ?>   注意,这里的variable_name不是变量值,而是变量名,可以先指定变量名,随后再赋值。你在某个页面中可 以改变变量的值,随后的页面访问该变量时会得到改变后的值。变量的类型是多样的,可以是一个字串,一个数 字,一个数组,甚至一个对象。举例来说明: < ?php $sess->register( "first"); if (check($firstname)) { $first = $firstname; } ?>   注意:这里有一点很重要。你可以先注册一个变量随后再对它赋值,这样非常有效,我们大可以在脚本的任 何地方定义变量而不赋值,而在随后的页面中再赋值,这样方便集中定义变量。大家可能注意到了,上面的例子 中我们没有简单的对变量赋值,处于安全的考虑,你不应该轻率地将表单数据放入变量。上例中,我们对变量进 行了检查,然后才对变量赋值。这是一个很好的习惯。大家应该注意。   注册完一个变量,当页面最后调用page_close()函数后,各个session变量会被写回到数据库中,如果你忘记 调用page_close()函数的话,变量就不会被写回数据库,将出现不可予知的后果。当变量被使用完毕后,你不在 需要用到了,可以调用以下函数将变量删除: < ?php $sess->unregister( "variable_name"); ?>   PHPLIB 7.0中,使用了一种存储结构,它允许你存储session数据到数据库中、共享内存中或者LDAP中。 PHPLIB使用了数据库类,这使得你有了更多的选择。   权限管理   权限是和认证分不开的。当一个用户的身份被确认以后,你可以接着来确定他的级别及权限。当然,你必须 先调用page_open来初始化"perm"对象。检查用户权限的命令如下: < ?php $perm->check( "permission_level"); ?>   这条命令会检查用户是否符合你指定的级别,指定的级别应在local.inc文件中已经定义好,你可以自己定义 各种级别。如果用户被检查出不符合级别。则perm_invalid()函数自动被调用。你可以建立自己的perm_invalid 函数。   以下是PHPLIB中检查权限的另一种方法: < ?php $perm->have_perm( "permission_level"); ?>   have_perm与check函数不同,它只返回true或false,但并不退出脚本,这样我们可以更好的控制程序流程。 < ?php if ($perm->have_perm( "guest")) { //do something; } elseif ($perm->have_perm( "admin")) { //do something else; } else { //yet something else; } ?> 转载:PHP技术网

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索管理 , session , 认证 , 进行 phplib ,以便于您获取更多的相关知识。