Ticket #13 (closed defect: fixed)

Opened 15 years ago

Last modified 15 years ago

cookie导致的登录问题

Reported by: chenchongqi Owned by:
Priority: major Milestone:
Component: 商家后台 Version: 5.0
Keywords: cookie,common_session_id,passport Cc: chenyinle@…, chenyin@…, huangjianhua@…, huangxianduan@…, lidarong@…, qinghonggang@…, tongyiliang@…, xujianyou@…, yuanhuoqing@…
Due Date:

Description (last modified by chenchongqi) (diff)

n年前的一件事,商城有家奇怪的店铺,登录用户访问他的店铺首页后就自动被踢出登录状态,用httpwatch查看所有链接后,发现是他的店铺banner图的链接有问题,访问这个图片时候cookie会被清掉。

今天,商城也有个问题,登录用户在自己后台操作一段时间后,自动变成未登录,即使登录是勾选“记住我”的选项也没用,这个问题比较隐蔽,因为时间很难判断,不是每次都出现。检查应用服务器、日志等等,都没有什么发现。最终在小虎的帮助下,我们抛弃了firefox的firebug,用起ie的httpwatch,终于发现是一个接口擦掉了common_session_id这个cookie,导致商城这边的passport判断为未登录。

这个接口的问题经过查证,是因为这个应用配置的passport数据源是错的,用户在商城登录时,用户信息同时保存在memcached和passport数据库里,这时调这个接口,他也是用passport.recognize方法来判断是否登录,passport也是先从memcached里查,所以皆大欢喜。过一段时间memcached过期后,这时调这个接口,缓存里过期了,passport.recognize他去数据库查,但是他的passport数据源配的和商城的passport数据源不一样,在他那里查数据库是没有这条session记录的,passport.recognize方法认为用户没登录,而且把http里带的cookie给删了。

这个很典型的例子,要求我们第一对web应用的一些细节真的要很深入了解,什么是域、cookie、作用范围、有效期、浏览器端接口等等,另外对现有的一些系统原理和机制也要熟悉,比如passport、上传、发布等等。

Change History

comment:1 Changed 15 years ago by chenchongqi

  • Description modified (diff)

comment:2 Changed 15 years ago by chenchongqi

  • Description modified (diff)

comment:3 Changed 15 years ago by chenchongqi

  • Description modified (diff)

comment:4 Changed 15 years ago by chenchongqi

  • Status changed from new to closed
  • Cc chenyinle@…, chenyin@…, huangjianhua@…, huangxianduan@…, lidarong@…, qinghonggang@…, tongyiliang@…, xujianyou@…, yuanhuoqing@… added
  • Resolution set to fixed

comment:5 Changed 15 years ago by chenchongqi

后续故事

用户说之前他们是可以多人同时登录同一个帐号进行操作的,这次事件之后只能单点登录操作了。咨询小虎后发现确实是这样,曾经出问题那个接口升级后用的是passport2,只能单点登录,虽然商城这边用的还是passport允许多登录,但是那个接口给限制住了。

不同版本的公用库一起使用就是这么v5,如果这次用户不就单点登录这个问题强烈反弹的话,接下来就直接升级到passport2去。

comment:6 Changed 15 years ago by chenchongqi

再后续,用户强烈反弹,现在修改了接口,让商城这边继续保持允许多点登录。

Note: See TracTickets for help on using tickets.