前端后端之间是通过什么方式传输token的?

用户登录成功后,后台程序会生成一个带签名的token返回给浏览器,当用户想要进一步操作时必须向后端提供该token,后端验证token无误后才允许进一步操作。但有个问题我一直有疑惑,网上也搜不到,大都是一笔带过,那就是后台生成的token是通过什么方式返回给前台的,cookie还是header?header能支持跨域吗?前端又是怎么把token传给后端的,url还是header?具体怎么弄的能不能说详细点,比如我用php将token加到header里:header("Authorization", $token) 为什么无效,要怎么设置?php如何接收参数Authorization的值?
谢谢!!!

阅读 18.7k
5 个回答

后端返回 token,在 cookie,header,或者直接在返回的内容中都可以,看你喜欢哪个。
我个人比较喜欢直接在返回的内容中,请求的时候直接封装一下请求函数,每次请求的时候把 token 带上。

当然,用 cookie 或 header ,也是可以的。

哪种方法不重要,重要的是要写对了,比如楼主在 php 中设置 header 就是写错了,不太会用 php 的函数的时候,可以去官网的文档中找一下:http://php.net/manual/zh/func...

以 jQuery.js 中的 ajax为例,我写一下使用 header 时的写法:

前端:header.html

$.ajax({
    url:"./header.php",
    data:{name:"header.html"},
    beforeSend: (request)=>{
         request.setRequestHeader("mytoken", "from header.html");//前端设置 header
    },
    success:(d,status,request)=>{
        console.log(d) //后端返回的内容
        var re=request.getResponseHeader("Authorization"); //返回返回的 header 对应的字段
        console.log("auth:",re)
    },
    error(e){
        console.log(e)
    }
})

后端: header.php

header("Content-Type: text/html;charset=utf-8");
header("Authorization:from header.php");//设置 header

echo "mytoken:",$_SERVER['HTTP_MYTOKEN']; //获取 header中的 mytoken 字段

一般是登录成功后 后台返回对应的token 后面前台调用接口 带在header里面就行

一般是放到header里面进行传输

例子如下

get(url:string, params = {}, contentType = 'application/json') {
    let headers = new Headers({ 'Content-Type': contentType, 'access-token': token });
    let options = new RequestOptions({ headers });
    ...
}
如果对您有用请采纳哦,欢迎关注我的公众号:前端指南 分享前端知识,每天早上7点40定期更新(不出意外的话)

网上也搜不到,大都是一笔带过。。那是因为acces_token直接返回啊,就直接echo啊,谁也没想到你居然想多了

我想到一种可能,我当初也遇到这种问题,但那是因为我那时候还是小白,从来没有做过api的开发,没接触过这种逻辑,但我不知道你是不是,如果是这种情况,我会换一种说法说给你听,或者需要 demo 也是可以的。下面的回答假设是你做过这种开发,但只是没有接触过token形式的开发。

以下假设你是用ajax接口的形式
直接模拟一遍流程

  1. 前端登录

    // 发送请求:user/login
    requestBody: {"tel":"123","pwd":"1234"}
    // 返回
    responseBody: {"nickname":"123","token":"123123-123123-123123"}
  2. 前端获取信息

    // 发送请求:user/money
    header:  token:123123-123123-123123
    requestBody: {}
    // 返回
    responseBody: {money:123123}

结论:直接和其他数据一起发回来就行了,没有任何特殊性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题