Rumah >pembangunan bahagian belakang >tutorial php >为什么我在A地登录某网站,别人在B地打开该网站,上面显示的是我的账号登录着?
如题:为什么我在一个地方(比如北京)用一个账号登录后,其他人在另一个地方(比如山西)登录该网站后,直接显示我的账号登录着?
比如,我在北京登录了segmentfault,其他人在山西打开segmentfault官网,看到网站就已经处于登录状态了,显示的就是我的账号,或许是我还未点击退出按钮或许是直接关闭浏览器,又或者其他。
目前怀疑登录时勾选了自动登录或者未通过点击退出按钮造成的,但现在还没测试出问题所在。望遇到过此类问题的童鞋给出思路或解决方向。
如题:为什么我在一个地方(比如北京)用一个账号登录后,其他人在另一个地方(比如山西)登录该网站后,直接显示我的账号登录着?
比如,我在北京登录了segmentfault,其他人在山西打开segmentfault官网,看到网站就已经处于登录状态了,显示的就是我的账号,或许是我还未点击退出按钮或许是直接关闭浏览器,又或者其他。
目前怀疑登录时勾选了自动登录或者未通过点击退出按钮造成的,但现在还没测试出问题所在。望遇到过此类问题的童鞋给出思路或解决方向。
因为服务器用session保存着你的登录状态。
在session过期或你主动注销之前,服务器会一直认为你处于登录状态,并在页面上显示登录用户的组件中展示。
好像是我理解错题目了……
这个问题不关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之后就好了。