当前位置:首页 > 网络编程 > WEB编程 > PHP > 一个完整、安全的PHP用户登录系统

一个完整、安全的PHP用户登录系统

点击次数:59 次 发布日期:2008-11-05 16:11:01 作者:源代码网
源代码网推荐

源代码网整理以下在使用PHP 编程的时候,我有一个习惯,不太喜欢使用现成的库文件,例如PHPLib或者其它类似的库,在这个系统中,我也打算自己写一个库文件,它需要处理认证、确认email ,更新帐号(密码,email )等事情。

源代码网整理以下为了在保证该系统安全的同时,不会加重我现有数据库的负担。因此这个新的系统要依赖cookies.这确实是一个两难的选择,因为如果只是设置一个用户名的cookie,是很不安全的,这行不通,但从数据库的负担考虑,我也不能加入一个简单的无序码而交由我的数据库来进行验证。

源代码网整理以下解决的方法是同时设置两个cookie,一个是用户名的cookie,一个是无序码的cookie. 这个无序码实际上是由用户名和一个超级密码(只有程序设计者知道)组合通过md5 ()函数运算产生的。由于md5 ()是一个单向的无序码,因此是不可以破解的。在用户更改email 时,我也可以用该email 和超级密码产生一个无序码,以让用户确认修改。这实际上是一个公匙/ 私匙类的系统。不明白?不要紧,下面再慢慢说明。

源代码网整理以下有趣的是,这个系统的扩展能力是可以达到无穷的,因为该系统的主要工作是计算md5 ()函数的值,而且由web 服务器完成,在负载增加时,可以加入其它的服务器来分担负载,虽然认证系统不会拖跨一个数据库,但是这样做就让最终的瓶颈只能出现在数据库上。

源代码网整理以下以下是该库中的两个函数——记号产生和记号认证函数。
   

以下为引用的内容:

源代码网整理以下    <?php

源代码网整理以下   $hidden_hash_var="your_secret_password_here";

源代码网整理以下   $LOGGED_IN=false;
   
      unset($LOGGED_IN);

源代码网整理以下   function user_isloggedin() {
   
     global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;
 
   file://已经进行无序码的检测了吗

源代码网整理以下   file://如果是的话,返回该变量

源代码网整理以下   if ( isset($LOGGED_IN) ) {

源代码网整理以下   return $LOGGED_IN;

源代码网整理以下   }

源代码网整理以下   file://are both cookies present?

源代码网整理以下   if ($user_name && $id_hash) {

源代码网整理以下   /*
       
      由cookies中得来的用户名和系统超级密码产生一个认证用的无序码如果该无序码与cookie中的无序码一样,则cookies中的变量是可信的,用户已经登录

源代码网整理以下   */

源代码网整理以下   $hash=md5($user_name.$hidden_hash_var);

源代码网整理以下   if ($hash == $id_hash) {

源代码网整理以下   file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候,

源代码网整理以下   file://就无需再次进行md5()运算

源代码网整理以下   $LOGGED_IN=true;

源代码网整理以下   return true;

源代码网整理以下   } else {

源代码网整理以下   file://两个无序码不符合,没有登录

源代码网整理以下   $LOGGED_IN=false;

源代码网整理以下   return false;

源代码网整理以下   }

源代码网整理以下   } else {

源代码网整理以下    $LOGGED_IN=false;

源代码网整理以下    return false;

源代码网整理以下   }

源代码网整理以下    }

源代码网整理以下   function user_set_tokens($user_name_in) {

源代码网整理以下   /*

源代码网整理以下   一旦用户名和密码通过验证,就调用这个函数

源代码网整理以下   */

源代码网整理以下   global $hidden_hash_var,$user_name,$id_hash;

源代码网整理以下   if (!$user_name_in) {

源代码网整理以下   $feedback .= " ERROR - User Name Missing When Setting Tokens ";

源代码网整理以下   return false;

源代码网整理以下   }

源代码网整理以下   $user_name=strtolower($user_name_in);

源代码网整理以下   file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用

源代码网整理以下   $id_hash= md5($user_name.$hidden_hash_var);

源代码网整理以下   file://设置cookies的有效期为一个月,可设置为任何的值

源代码网整理以下   setcookie("user_name",$user_name,(time()+2592000),"/","",0);

源代码网整理以下   setcookie("id_hash",$id_hash,(time()+2592000),"/","",0);

源代码网整理以下   }

源代码网整理以下   ?>

源代码网整理以下 源代码网供稿.

网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华