首頁 >後端開發 >php教程 >为什么我在A地登录某网站,别人在B地打开该网站,上面显示的是我的账号登录着?

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

WBOY
WBOY原創
2016-06-06 20:45:301474瀏覽

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

比如,我在北京登录了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之后就好了。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn