Heim  >  Artikel  >  Backend-Entwicklung  >  为什么我在A地登录某网站,别人在B地打开该网站,上面显示的是我的账号登录着?

为什么我在A地登录某网站,别人在B地打开该网站,上面显示的是我的账号登录着?

WBOY
WBOYOriginal
2016-06-06 20:45:301411Durchsuche

如题:为什么我在一个地方(比如北京)用一个账号登录后,其他人在另一个地方(比如山西)登录该网站后,直接显示我的账号登录着?

比如,我在北京登录了segmentfault,其他人在山西打开segmentfault官网,看到网站就已经处于登录状态了,显示的就是我的账号,或许是我还未点击退出按钮或许是直接关闭浏览器,又或者其他。

目前怀疑登录时勾选了自动登录或者未通过点击退出按钮造成的,但现在还没测试出问题所在。望遇到过此类问题的童鞋给出思路或解决方向。

回复内容:

如题:为什么我在一个地方(比如北京)用一个账号登录后,其他人在另一个地方(比如山西)登录该网站后,直接显示我的账号登录着?

比如,我在北京登录了segmentfault,其他人在山西打开segmentfault官网,看到网站就已经处于登录状态了,显示的就是我的账号,或许是我还未点击退出按钮或许是直接关闭浏览器,又或者其他。

目前怀疑登录时勾选了自动登录或者未通过点击退出按钮造成的,但现在还没测试出问题所在。望遇到过此类问题的童鞋给出思路或解决方向。

因为服务器用session保存着你的登录状态。
在session过期或你主动注销之前,服务器会一直认为你处于登录状态,并在页面上显示登录用户的组件中展示。

好像是我理解错题目了……

  1. 浏览器具有cookies功能。为了避免重复登录动作,网站通常会在登录时将登录信息记录到cookies中,这样关闭页面下次打开时可以使用这个cookies,省去了登录操作。
  2. 登录时一般会有选项让用户选择保持登录多久,在这个有效期内,同个浏览器内都会自动登录该帐号,即使你关闭过浏览器。
  3. 如果不想要自动登录,可以在登录时选择不自动登录,可以手动登出,也可以清理cookies。
  4. 一般跨浏览器(跨内核)的cookies是不通用的。但仍然有可能强制同步,例如解雇IE扩展之类的。
  5. 一般跨机器同步是不常见的,但不少浏览器仍然有同步cookies的扩展或功能。
  6. 排除自己登录过、cookies同步等各种情况时,依然出现了自动登录,这基本都是网站设计的问题了。一般cookies不直接储存登录前信息(例如用户名密码,哪怕是加密过的),而是储存登录后信息,一般叫令牌(token)。设计不良的系统可能出现令牌冲突或者读取识别错误,导致登录他人帐号。MS这样的栗子出现过不少……比如12306神马的……

这个问题不关cookie什么事啊。很明显SessionId串号了。

题主的情况是:当你打开这个网站的时候,服务器给你发了一个随机的一段数字,作为你的身份证,比如:
123456789,因为给每个人发的号码都是随机的,所以可以认为是唯一的,但是并不是绝对的,可能网站程序采用的随机算法有问题,导致生成的随机数相同了,也就是把123456789这个数字又给了另一个人,然后就认为你们两个是同一个人了。。。。。
听新闻说渣浪微博出现过这个情况哈,应该是用户太多导致冲突几率变大了吧。。。
要验证是不是这种情况,可以用查看cookie的工具,在两边都看下是不是重复的。

另:所谓session劫持,就是这么个原理:恶意用户通过某种手段,如xss等,获取到用户cookie中的sessionId,拥有此id,对于程序来讲就代表你是这个用户,然后黑客就可以行使此用户的所有权限。
所以sessionId放在cookie中时,请记着设置为httponly,并加密传输。

再补充:楼上说的缓存也是有可能的,可能某些战五渣类的CDN或者ISP把你的请求结果缓存了吧,但是这种情况几率应该不高,那样的话就不止一个人受影响了,通过此CDN或ISP的用户都会受到影响的。

你没有登出的话网站是不会主动删除你的cookie的,cookie没有过期的话你的登陆状态就不会改变

首先,不讨论Cookie的话,服务器是没有办法识别用户的。这个IP登录了并不代表这个IP后只有一个主机,也不能代表这个IP所代表的主机上只有一个浏览器。


所以,Cookie就出来了。你第一次访问的时候(或者登录的时候)给你一个Cookie,以后你的每一次请求都带上这个Cookie,服务器收到以后看Cookie的值,找到这个Cookie对应的记录,看下你的信息(在这个例子中是看下你有没有登录)。

当然,浏览器中每个Cookie都有一个失效时间,失效后直接删除Cookie。所以在服务器端,每一个Cookie对应的存储文件(一般叫Session)也有一个失效时间,也是失效后直接删除Session。


所以,很明显的,客户端Cookie和对应的服务器端Session有一个丢失,服务器就没有办法知道你的登录状态。

最后的原因就是(其实别人都说过了):浏览器Cookie没有失效,服务器Session也没有失效。

session是唯一识别的,所以一定是session没有失效的前提下,异地用户访问时,cookie中标记了该session的sessionid了,只有这么一种可能吧

说实话

你们忘了一个问题

那就是网站本身有问题

例如头段时间某大学访问其手机官方网站

直接被随机登录一个用户

我只是提供一种可能。。

这个问题以前在17K上面遇到过,我设的自动登录,有次打开网站直接显示登录的是别人的账号

楼上几位貌似没有看清楚问题。
题主已经说了,换人在外地登陆,所以也就不存在cookie的问题。
也不会是session的问题。
而程序问题是最大的可能性!

我来说一个可能性吧。

之前我们写的一个网站出现了这个问题,别人没登陆就自动出现了别人的账号。

查了一下,我们是学校的一个项目,被学校网络中心出口的服务器缓存了页面。

我们自己强制加上no-cache之后就好了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn