印象中大多数网站都是在一个统一的登陆页面进行登录,然后进行后续操作。很少看见弹出登陆框登录这种交互形式。我们公司网站由于基于一套会员体系,但是分别服务于多个不同的应用。为了统一注册和登录逻辑以及个性化定制登录界面,于是开发了一套登录组件。只要引用这个登录组件就可以弹窗登录,并定制自己的一些风格。这种登录交互方式可能带来问题:你的应用如果包含依赖登录逻辑的Cookie,且应用又有相关业务逻辑是依赖这些Cookie值,那么就可能出现问题。
登录组件只负责初始化你的登录Cookie,具体应用中业务相关Cookie登录组件不会关心,这样导致第一次登录成功时业务性Cooki还没初始化成正确的值,但实际上你已经登录了。举个例子:你想发一个帖子(发帖需要登录),此时你还没登录然后点击登录弹窗进行登录。POST数据一般都要一个放CSRF攻击的Token,这个Token一般依赖Cookie或者Session来生成。登录后页面表单的Token实际上是无效的,而当你提交表单时此时Cookie值跟先前登录刷新页面生成的Cookie已经不一样了,这样就会出现CSRF校验失败的情形。