关于token和sessionid的一些说法

最近涉及到一个数据迁移的业务场景,之前对AT有一定的了解,没这么深刻,这次算是比较深的理解。

摘自: bbs 作者:chendejia2012

其实token就相当于sessionId,为什么app喜欢用token,而不用sessionId呢?

app说他们保管cookie不方便,不好维护cookie,因为cookie是浏览器的东西,app天生不支持cookie。我觉得很奇怪,浏览器也会出现关闭cookie的时候,这时,服务器会重写url,将sessionId放到url后面,如果app不打算用cookie,那么与浏览器关闭cookie无异,服务器将sessionId放到url后,app完全可以把sessionId拿出来,缓存到app数据库或者内存中,下次访问服务器就带上sessionId。

服务器默认的sessionId名称叫JSESSIONID,app说他们需要token,那么就把JSESSIONID换一个名称,就叫token,那么服务器和重写url返回sessionId一样,就把token放到url后面就可以了。实际token和JSESSIONID的值是一样的,换汤不换药,然后APP开发会觉得很高兴,他们终于拿到想要的token了。然而对api开发来说,感觉这其实多此一举。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

那么到底是不是多此一举,token是怎么来的呢?为什么会有token这个说法和用法?

毕竟我相信“存在即合理”

实际如果app后面对应的服务器如果是分布式系统,就需要token了。

因为app需要到登录服务器上登录,然后到应用服务器去获取数据,这里涉及到不同的服务器,那么不同服务器对应到该app客户端的sessionId肯定不一样,app不像浏览器那么强大,管理不同域下的sessionId都很方便,这时app肯定希望有一个统一的sessionId,那就是token,方便访问不同的服务器

还有一个理由是,应用服务器需要校验当前app是否登录,于是要到登录服务器上去询问,询问时总要带个app的凭证吧,于是需要一个token,这个token是登录服务器给app的,应用服务器拿着这个token去询问登录服务器,登录服务器校验该token后,就会告知应用服务器当前app是否合法(在我这里登录过),然后应用服务器才能放心的把数据返回给app。

大家可以参考单点登录服务器与应用服务器,与客户端的交互,便可知道token的用法了。

实际如果应用服务器同时带登录功能,那么完全可以不必搞个token出来,就沿用sessionId就可以了。如果app非要token,那么可以修改server.xml,把默认JSESSIONID改成token。

经常会看到第三方服务接口,如新浪微博,都需要带上一个access_token,实际新浪微博就相当于一个第三方登录系统,而且心流浪微博后面会有多个分布式系统,系统与系统之间交互肯定需要token,那么新浪微博就会要求客户端带上access_token,而这个access_token是可以通过新浪微博接口获取的,每获取一次,access_token会改变,看来这个access_token就像一个sessionId,可以重置。

至于说经常会有服务器开发和app开发争论token和sessionId谁优谁劣完全没有意思,具体问题具体分析,该用什么就用什么。就好像争论java好还是c好,还是PHP好一样,不同的东西有不同的业务场景。

还是那句话 “ 存在即合理 ”...

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Token和Session都是用于身份验证和授权的机制,但它们的实现方式不同。 Token是一种轻量级的身份验证方式,通常是一串加密后的字符串,包含有关用户身份和权限的信息。当用户进行登录或授权操作时,服务器会生成一个Token并将其返回给客户端,客户端在后续的请求中携带该Token,服务器通过解析Token来识别用户身份和权限。 Session是服务器端的一种状态管理机制,服务器会为每个会话分配一个唯一的Session ID,将该ID存储在客户端的Cookie中。当用户进行登录或授权操作时,服务器会创建一个Session,并将Session ID返回给客户端。客户端在后续的请求中携带该Session ID,服务器通过该ID来识别用户身份和权限。 总的来说,Token适用于分布式系统或跨域场景,而Session适用于同一域名下的Web应用。 ### 回答2: Token和Session都是用于身份验证和授权的机制,用于验证用户的身份和为用户提供访问权限。 Token是服务器为客户端生成的一串字符,作为客户端在后续请求中进行身份验证的凭证。它可以是短暂的或永久的,在有效期内可以用来访问特定的资源或执行特定的操作。通常情况下,当用户成功登录后,服务器会生成一个token并返回给客户端,客户端将token保存在本地,之后每次请求时携带token信息,服务器通过校验token的合法性来判断用户的身份和权限。 Session是一种服务器端的机制,用于跟踪和记录用户的状态。服务器会为每个会话创建一个唯一的sessionID,并将sessionID存储在服务器上。当用户通过进行登录后,服务器会创建一个session,并将sessionID返回给客户端。客户端在后续的请求中将会携带此sessionID,而服务器可以通过检查sessionID来确定用户的身份和权限。 Token和Session的主要区别在于存储位置和实现方式。Token是存储在客户端的,而Session是存储在服务器端的。Token相对来说更容易扩展和实现分布式的系统,因为服务器不需要存储和维护session信息。而Session则可以更好地保护用户的敏感信息,因为session数据存储在服务器端,用户无法直接访问和修改。 在实际应用中,我们可以根据需求和场景选择使用Token或Session机制来进行身份验证和授权,确保系统的安全性和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值