phplib php5,使用PHPLIB进行Session的管理和认证(转载)-PHP教程,PHP应用

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; }

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值