php学习(三)关于身份验证、以及require路径问题

1、首先是时间格式的数据插入:

如果数据库中数据的格式是:datetime,

$currentTime = date('Y-m-d H:i:s');之前是直接插入$currentTIme,无用。需要在插入的数据前后加上单引用号,用来和int型的数据做区分。


2、数组如何转换为字符串

$vegetables[0] = "corn";
$vegetables[1] = "broccoli";
$vegetables[2] = "zucchini";
$text = implode(",", $vegetables);
echo $text;

这样可以格式化的输出数组


3、身份验证

其余的字段根据不同的需求去考究,我这里是有两个字段:

token varchar(32)    

timeout int(10) unsigned

token是生成的在timeout时间段内有效的令牌,每个api请求都需要通过token进行验证来保证具有网络访问的权限,进行校验的时候,先根据token查出timeout来,
如果无法找到该token的用户证明是无效用户需要重新登录,如果是有该token但是当前时间的time()已经大于数据库中的timeout就证明是帐号的token过期,也需要用户重新登录
token的生成算法如下:
function genToken( $len = 32, $md5 = true ) {
            # Seed random number generator
            # Only needed for PHP versions prior to 4.2
            mt_srand( (double)microtime()*1000000 );
            # Array of characters, adjust as desired
            $chars = array(
            'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`',
            'S', '-', 'N', '<', 'D', '{', '}', '[', ']', 'h', ';', 'W', '.',
            '/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a',
            'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')',
            '?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n',
            '=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T',
            'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*'
                    );
                    # Array indice friendly number of chars;
                    $numChars = count($chars) - 1; $token = '';
                    # Create random token at the specified length
                    for ( $i=0; $i<$len; $i++ )
                        $token .= $chars[ mt_rand(0, $numChars) ];
                    # Should token be run through md5?
                    if ( $md5 ) {
                        # Number of 32 char chunks
                        $chunks = ceil( strlen($token) / 32 ); $md5token = '';
                        # Run each chunk through md5
                        for ( $i=1; $i<=$chunks; $i++ )
                            $md5token .= md5( substr($token, $i * 32 - 32, 32) );
                        # Trim the token
                        $token = substr($md5token, 0, $len);
                    } return $token;
        }
而timeout入库的大小可以自己定义:
time()是获取当前时间,如果设置一周过期的话,那么在用户Login或者register的时候插入的timeout时间就是:time()+60*60*24*7;

4、require路径的问题

require这个问题之前一直困扰我很久,我的文件夹是这种情况:

       app,dao,exception是平行目录

app下有user,dao下有core文件夹,文件夹里也有user负责数据库操作,并且返回user的数据结构给app,exception中有自定义的db_exception

这个时候app下的user,引用core里面的user是require_once('../dao/core/user.php');

而core里面的user又相对引用了一个自定义的exception,require_once('../../exception/db_exception');

这个时候我访问app下的user,php就开始报错,报错的地方是core里面对exception的require是有问题的---找不到,我就觉得很奇怪。

       后面发现原因在,当你通过app中的user访问的,当前的路径就是app的路径,而core中又是相对引用的db_exception,由于当前的路径是app的路径所以相对路径就无法找到exception这个文件夹了。解决问题的方法如下:

       dirname(__FILE__),通过他获取当前文件夹的绝对路径,通过这个方式,在app中的user的路径是app,那么require core中的user,这个时候core中的user的dirname(__FILE__)他的值是dao/core,通过这样的方式保证文件路径的决定性,保证了require_once引用的正确性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值