php学习笔记:登录练习(2)

继续请教一下同事关于token 这块设计,token这块可以带时间验证,也可以不带时间验证。在当初接触微信开发的时候,每次接口调用都是有时间凭证。所以在授权方需要这样处理。对于一些安全级别不要求那么高,没有资金需求。一个token 可以降低一下复杂度的设计,不一定需要用到接口过期时间去验证。安全级别高,加上这块还是有必要。

在上次练习中,使用session保存token。而这一次使用数据库,建立一个token表。每次登录后,刷新相应的用户token信息。

这里写图片描述

token表里面只是记录token,用户uid,exprise_time 过期时间预留字段。

在原有基础上进行修改调整。login.php

<?php

   //1.验证接口,接收数据,过滤数据合法性
   //2.构建数据库链接
   //3.md5 验证数据库用户密码
   //4.生成session,返回token,带时长,或者使用数据库插入token,每次用数据库检索
   //5.前端localStore 保存token,接口请求发送需要带上验证token匹配

    header('Content-Type: application/json');
    header('Content-Type: text/html;charset=utf-8');
    $userName = $_POST['userName'];
    $userPwd = md5($_POST['userPwd']);
    $conn = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());

    mysql_select_db("test",$conn);
    mysql_query("set name utf-8");

    //查询结果验证
    $sql = "select * from user where name ='$userName' and pwd = '$userPwd'";
    $result = mysql_query($sql);

    if($data=mysql_fetch_array($result))
    {
        session_start();//启动session
        $_SESSION['name'] = $data['name'];
        $_SESSION['uid']  = $data['id'];

        //生成token 返回给前端
        $token = createToken();
        //不带过期时间更新
        $sql = "update token set token='$token' where uid = ".$data["id"]; 
        $result = mysql_query($sql);
        if($result)
        {

           output(200,$token,'success');   
        }
        else
        {
           output(400,'','密码或帐号出错');    
        }       
        //返回一个结果     
    }
    else
    {
        output(400,'','密码或帐号出错');       
    }
    mysql_close($conn);
    //生成不重复的token,利用网上一个算法
    function createToken()
    {
        $token = md5(uniqid(md5(microtime(true)),true));
        $token = sha1($token);  
        return $token;  
    }

    function output($code,$token,$msg='')
    {  
        $outputData = array();
        $outputData['code'] = $code;
        $outputData['token'] = $token;
        $outputData['msg'] = $msg;
        echo json_encode($outputData);
    }

?>

调整过后,Session方式不做处理,改成每次登录对token表进行刷新处理。登录后,每次token都会缓存一份在客户端。

$sql = "update token set token='$token' where uid = ".$data["id"]; 
$result = mysql_query($sql);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值