Token是什么?
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
一.产生原因
app 应用需要访问服务器,此过程中涉及到身份认证和权限控制的问题,如何搭建 app 和服务器之间信任的桥梁?
我们都知道,session、cookie 是作为浏览器里面的用户和服务器之间认证的一个方式,而app 和服务器之间的交流也是使用的 http 请求,很明显它们遇到的问题是差不多的,但是因为 app 和浏览器又不完全一样(浏览器可以存放 cookie),所以我们可以借鉴浏览器和服务器的思想来解决 app 和服务器端的
cookie、session 的实现方式:
cookie 的实现方式是浏览器本身支持服务器端向浏览器写入键值对数据,当然客户端可以禁止服务器向客户端写入 cookie。
session 的实现方式是根据客户端的请求来找出当前客户端在服务器端的存放信息,有两种实现方式:
1.使用 cookie 写入 jsessionid=xxx
2.使用 url 重写(相当于在 url 后面加入 jsessionid=xxx)
无论使用哪种实现方式,最后都可以根据当前的客户端请求来确定当前请求的 request 在当前服务器中对应的 session,所以才会有 HttpSession session = request.getSession(); 因为session的确定必须从 request 里面拿到它的 jsessionid 才能取到对应的 session。
通过对浏览器和服务器交互的实现方式我们知道了要记录当前用户的信息我们需要在浏览器和服务器之间进行交互时传递一个 jsessionid 来标记当前用户,于是我们也可以通过同样的方式来记录app和服务器之间的交互,也就是 app 用户在登录之后我们都会给它一个 token 字符串来唯一标识当前用户,这样当下次这个人来的时候我们就可以根据 token 来取出当前用户的数据信息(用户个人信息、权限...),而且我们可以通过设定 token 的实效时间来控制用户的在线时间
二.实现方式
通过上面的分析我们知道了,我们只需要为每一个访问用户记录下来一个唯一的 token 即可(不可重复),之后我们就可以根据用户的 token来实现 app 端和服务器端之间的相对安全的交互了。
使用 token 是为了信息安全,我们可以根据设置 token 的失效时间来控制用户是不是可以对服务器进行访问,而且可以控制指定用户的访问保证用户数据的安全性。
三、知识延伸
php写cookie是在浏览器请求时通过HTTP headers传给浏览器的;
浏览器接收到之后在内部处理在浏览器所在地建立cookie;
js写cookie应该就是直接操作本地的cookie文件了;
相关问题:
php网站的session在服务器端是如何给客户端分配sessionid的
当用户浏览页面触发页面的session 并且在 session 数组里面 赋值 这个session文件在服务器是存放在 php.ini配置文件制定的位置吗?
对于不同的来访用户 对 session文件的寻找(根据sessionid的匹配) 这些 工作是 php 的session机制实现的吗?php程序员需要 了解这方面的细节吗?
回答:
在PHP.INI里面有一项session.save_path,就是设置session保存位置的。
session是通过cookie来实现的,当浏览器访问一个页面时,php发现在cookie里面没有sessionid这个值,就会产生一个sessionid出来,同时对应一个服务器里面的session文件。然后通过cookie传给浏览器(通过cookie),下次浏览器再访问页面的时候,就会把这个sessionid给带上(也是cookie),然后php通过这个cookie找到对应的session文件,读取session的值。也就是说如果用户关了cookie那session就用不了了。 以上就是session的原理。
sessionid作为用户的状态判断 在用户每次请求页面时 这个id会随着 http 请求的头描述 发送 !
在php程序里面 是只需要 开启 session 然后在 session 全局数组 里面 赋值 就可以了?
存储的位置 是由 php 来处理?
还有每次传过来的sessionid 提供给 php 程序 让 他 去寻找 对应此 id 的session文件 将里面的数据读到 session 数组里面(依次来实现 不同的 用户有 不同的 数据)?
追答:
这些过程你不用管,你只要知道,对于一个用户,在session的有效时间内,你设置了$_SESSION['abc'] = 6;然后在其他页面读取这个$_SESSION['abc']就会得到6,中间怎么处理sessionid什么的,php都给你做好了。
你就把它想成一个超级全局变量那样直接使用好了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。