用户认证时,如果不用session,还可以怎样处理?

烈冰 发布于 2010/08/25 11:22
阅读 4K+
收藏 1

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

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

加载中
0
红薯
红薯

只能是进一步加强cookie的安全算法了吧

0
jobell
jobell

做集中式session处理吧,用memcached。

0
e
elang

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

0
JavaGG
JavaGG

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

0
小沉积
小沉积

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

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

这样子很不安全

0
mallon
mallon

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

0
alexhaifeng
alexhaifeng

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

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

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

0
linnchord
linnchord

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

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

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

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

SkyFervor
SkyFervor
写的挺不错的。只是今天看来用户数量级问题确实是一个普遍存在的问题,session在分布式上存在问题越来越凸显
0
烈冰
烈冰

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

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

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

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

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

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

0
李永波
李永波

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

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

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

返回顶部
顶部