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

来源:互联网 发布:电脑midi软件 编辑:程序博客网 时间:2024/05/17 03:05

继续请教一下同事关于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);
原创粉丝点击