仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1684|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:利用PHPLIB停止Session的办理和认证(转...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:25:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学校并没有那么多的时间可以让我们在实际开发上面。session   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; }
?>

  用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。
再现理想 该用户已被删除
沙发
发表于 2015-2-4 13:06:01 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
小妖女 该用户已被删除
板凳
发表于 2015-2-6 16:30:40 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-6 16:53:28 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
海妖 该用户已被删除
5#
发表于 2015-2-17 09:47:36 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
若相依 该用户已被删除
6#
发表于 2015-2-22 19:57:19 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
因胸联盟 该用户已被删除
7#
发表于 2015-2-24 23:27:47 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
简单生活 该用户已被删除
8#
发表于 2015-2-27 04:01:43 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
不帅 该用户已被删除
9#
发表于 2015-3-7 19:15:31 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
只想知道 该用户已被删除
10#
发表于 2015-3-11 10:35:32 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
莫相离 该用户已被删除
11#
发表于 2015-3-13 04:10:17 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
乐观 该用户已被删除
12#
发表于 2015-3-16 21:03:04 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
飘飘悠悠 该用户已被删除
13#
发表于 2015-3-17 03:10:10 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-3-23 17:01:29 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
冷月葬花魂 该用户已被删除
15#
发表于 2015-3-24 00:53:23 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
若天明 该用户已被删除
16#
发表于 2015-3-24 17:54:50 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
爱飞 该用户已被删除
17#
发表于 2015-3-26 18:23:50 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
蒙在股里 该用户已被删除
18#
发表于 2015-4-3 04:31:52 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
柔情似水 该用户已被删除
19#
发表于 2015-4-6 01:11:15 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
山那边是海 该用户已被删除
20#
发表于 2015-4-15 07:16:10 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 13:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表