14
回答
用户认证时,如果不用session,还可以怎样处理?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

最近在研究RESTful,里面提到一个原则是”无状态通信“,这样的话就不用session。我现在的想法是,用户登陆成功后把用户名和登录时间(可能还有其他信息)加密放到cookie,然后每次请求都校验用户是否合法,oschina似乎就是这样做。但cookie可以伪造,如果加密算法被破解就更糟……

大家对这个”无状态通讯“有什么看法?如果要实现这个无状态通讯,你会怎样做?

举报
烈冰
发帖于7年前 14回/4K+阅
共有14个答案 最后回答: 5年前

无状态通信,又要认证,那不就是每次都要认证,就算你用cookie,到服务端一样是要重新认证,所以不管是否加密cookies,密码一定要先加密

引用来自#5楼“JavaGG”的帖子

改成url,把用户信息都加上url上,再把相应的东西加密?

这样子很不安全

引用来自#7楼“mallon”的帖子

我现在用的是HTTPS + HTTP基本认证,很方便。其实仔细想想,Session真的是一个奇怪的存在

 是这种方式比较好,不过这种要做一些配置相比较Seesion很方便

我觉得无状态其实是一个比较奇怪的说法,虽然http是无状态的,但是web应用本身的逻辑是要求用户状态的,为啥非要说无状态?

目前所谓无状态其实就是不采用一般web服务本身提供的session机制,自己通过cookie来实现用户状态认证,这样处理有利于服务的分布。session模式与其比较,其实就是这种“无状态”处理的高性能缓存实现而已,没有本质的差别。

session被人诟病的主要就是分布问题和滥用问题,但是完全抛弃session我觉得是一个矫枉过正的做法。session使用应该严格限制在用户状态维护这个唯一用途上,而分布问题主要是一个用户数量级的问题,集中式session服务的模式可以适用于绝大多数应用。除非某天你的应用同时在线人数达到上千万,服务集群导致session服务也无法负载,而这一天对于绝大多数应用来说很遥远。

所以我觉得一般应用,设计一个良好的用户状态认证的接口,在不同的情况下采取不同的解决方案即可,没必要一来就取消session,毕竟在一般情况下session的实现简单,性能也优于自己实现数据库认证。

--- 共有 1 条评论 ---
SkyFervor写的挺不错的。只是今天看来用户数量级问题确实是一个普遍存在的问题,session在分布式上存在问题越来越凸显 2年前 回复

引用来自#9楼“linnchord”的帖子

我觉得无状态其实是一个比较奇怪的说法,虽然http是无状态的,但是web应用本身的逻辑是要求用户状态的,为啥非要说无状态?

目前所谓无状态其实就是不采用一般web服务本身提供的session机制,自己通过cookie来实现用户状态认证,这样处理有利于服务的分布。session模式与其比较,其实就是这种“无状态”处理的高性能缓存实现而已,没有本质的差别。

session被人诟病的主要就是分布问题和滥用问题,但是完全抛弃session我觉得是一个矫枉过正的做法。session使用应该严格限制在用户状态维护这个唯一用途上,而分布问题主要是一个用户数量级的问题,集中式session服务的模式可以适用于绝大多数应用。除非某天你的应用同时在线人数达到上千万,服务集群导致session服务也无法负载,而这一天对于绝大多数应用来说很遥远。

所以我觉得一般应用,设计一个良好的用户状态认证的接口,在不同的情况下采取不同的解决方案即可,没必要一来就取消session,毕竟在一般情况下session的实现简单,性能也优于自己实现数据库认证。

根据我的理解,那个所谓的无状态主要是为了解决session在多机负载均衡时带来的问题。不过我觉得用cookie来保存状态还有些不足。用户认证授权这块还有待研究

引用来自#7楼“mallon”的帖子

我现在用的是HTTPS + HTTP基本认证,很方便。其实仔细想想,Session真的是一个奇怪的存在

 这个是怎么回事呢   请教一下

顶部