网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > PHP > PHP技术进阶 > 一个完整、安全的PHP用户登录系统  

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

2007-11-14  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

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

网管下载dl.bitscn.com

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

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

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

网管联盟bitsCN_com

    以下是该库中的两个函数——记号产生和记号认证函数。
   
    <?php

中国网管论坛bbs.bitsCN.com

   $hidden_hash_var='your_secret_password_here';

网管下载dl.bitscn.com

   $LOGGED_IN=false;
   
      unset($LOGGED_IN);

中国网管联盟bitsCN.com

   function user_isloggedin() {
   
     global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;
 
   file://已经进行无序码的检测了吗 网管bitscn_com

   file://如果是的话,返回该变量 中国网管论坛bbs.bitsCN.com

   if ( isset($LOGGED_IN) ) {

网管u家u.bitscn@com

   return $LOGGED_IN;

网管网www.bitscn.com

   }

网管网www_bitscn_com

   file://are both cookies present?

网管论坛bbs_bitsCN_com

   if ($user_name && $id_hash) {

网管联盟bitsCN@com

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

中国网管论坛bbs.bitsCN.com

   */ 网管u家u.bitscn@com

   $hash=md5($user_name.$hidden_hash_var);

网管下载dl.bitscn.com

   if ($hash == $id_hash) { 网管bitscn_com

   file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候, 网管下载dl.bitscn.com

   file://就无需再次进行md5()运算 网管网www_bitscn_com

   $LOGGED_IN=true;

网管bitscn_com

   return true; 中国网管联盟bitsCN.com

   } else { 网管联盟bitsCN_com

   file://两个无序码不符合,没有登录

网管u家u.bitsCN.com

   $LOGGED_IN=false; 网管联盟bitsCN_com

   return false;

网管网www.bitscn.com

   }

中国网管论坛bbs.bitsCN.com

   } else { 网管网www.bitscn.com

    $LOGGED_IN=false;

网管下载dl.bitscn.com

    return false;

网管联盟bitsCN_com

   }

网管u家u.bitscn@com

    } 中国网管联盟bitsCN.com

   function user_set_tokens($user_name_in) {

网管bitscn_com

   /*

网管网www.bitscn.com

   一旦用户名和密码通过验证,就调用这个函数

网管u家u.bitscn@com

   */ 中国网管联盟bitsCN.com

   global $hidden_hash_var,$user_name,$id_hash; 网管联盟bitsCN@com

   if (!$user_name_in) {

网管网www_bitscn_com

   $feedback .= ' ERROR - User Name Missing When Setting Tokens '; 网管u家u.bitsCN.com

   return false;

网管联盟bitsCN@com

   }

网管下载dl.bitscn.com

   $user_name=strtolower($user_name_in);

网管联盟bitsCN@com

   file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用 网管下载dl.bitscn.com

   $id_hash= md5($user_name.$hidden_hash_var); 网管联盟bitsCN_com

   file://设置cookies的有效期为一个月,可设置为任何的值 中国网管论坛bbs.bitsCN.com

   setcookie('user_name',$user_name,(time()+2592000),'/','',0);

网管联盟bitsCN@com

   setcookie('id_hash',$id_hash,(time()+2592000),'/','',0); 中国网管论坛bbs.bitsCN.com

   }

网管下载dl.bitscn.com

   ?> 网管bitscn_com

网管联盟bitsCN_com


TAGs   登录   系统   用户   完整   安全   一个       email   无序   user_name      
 上一篇:没有了   下一篇:没有了
一个完整、安全的PHP用户登录系统 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: