精华内容
下载资源
问答
  • 关于两个用户用同一浏览器不能同时登录同一网站的问题(session覆盖问题)
    万次阅读
    2017-09-11 19:50:47

    mask和一个小伙伴最近在帮学校搭一个网站,大体完工后,小伙伴告诉mask网站有bug——使用两个用户登录该网站时,第一个用户会被挤掉。拿到问题时,我就觉得应该是session的问题(网站使用session进行身份验证),于是我用两个不同的浏览器分别登录这两个账户,发现没再出现这一问题,看了果然应了我的想法,session设置有问题。 想了一下网站的应用场景也没在意这个问题,但是我一直记着。今天就探索了一下,原来是由于session覆盖,我使用的是chrome与Firefox,据资料显示这两个浏览器的session是共享的,我想大多数浏览器都是吧,当两个用户用同一浏览器登录时,后面登录的那个账号会使用之前账号的session,这就导致前一个账号备覆盖了。原理就是这样,如果各位想要找到解决办法,可以在csdn论坛搜索session覆盖,看看各位大神的回答。

    更多相关内容
  • js设计模式在web前端开发中的实践——网站登录

    千次阅读 多人点赞 2019-12-14 19:10:27
    本文,笔者将以一个登录模块的开发...先说,这个网站很大,所以有很多模块,比如:header头部、nav导航、消息列表、购物车… 这些模块有一个共同的特点,就是必须先用ajax异步请求获取用户登录信息 —— 这是正...

    本文,笔者将以一个登录模块的开发流程,向各位说明穿插在其中的知识点 —— 【单例模式】和【发布-订阅模式】的使用。


    OK,步入正题。

    假如你是一个大型网站的前端开发人员,在经过激烈地讨论以后,决定让你负责登录模块的开发。
    先说,这个网站很大,所以有很多模块,比如:header头部、nav导航、消息列表、购物车… 这些模块有一个共同的特点,就是必须先用ajax异步请求获取用户的登录信息 —— 这是正常的,比如header中就要显示用户的名字和头像。
    所以你很重要。

    你着手做了。你的构思是:仿Web QQ那样。比如当点击了左边导航栏里的“请登录”的头像时,就会弹出一个遮罩层 + 一个登录浮窗。很明显这个浮窗在页面中总是唯一的。
    第一种解决方案是在页面加载完成以后便创建好这个div浮窗,他一开始是处于隐藏状态的,当用户点击时,才开始显示 —— 我想,用js控制的display切换会有帮助。
    但你很快就会发现一个问题:也许用户进入这个页面只是随便逛逛、看看天气、or打打游戏,根本不想进行登录操作。这时,这个“总是一开始就被创建好的登录浮窗”就有可能成为白白浪费一些DOM节点的“元凶”。
    你很快又有了想法,决定让用户点击对应区域时再去加载。你可能会写类似如下代码:

    <body>
    	<button id="loginBtn">登录</button>
    </body>
    
    //js
    <script>
    	var createLoginLayer=function(){
    		var div=document.createElement('div');
    		div.innerHTML="我是登录浮窗";
    		div.style.display="none";
    		document.body.appendChild(div);
    		return div;
    	}
    	document.querySelector('#loginBtn').onclick=function(){
    		var loginBtn=createLoginLayer();
    		loginBtn.style.display="block";
    	}
    </script>
    

    你突然发现,这样做虽然避免了每次页面打开时的DOM浪费,却产生看一个更大的问题:每次click时都会创建一个新的div!虽然我们可以在点击“关闭”时去销毁掉这个ElementNode,但这样频繁地创建和删除结点,在一个页面上,明显是不合理,也是不必要的。
    于是你自然地想到了前几天看到的 惰性单例设计模式 ,可以用一个变量去判断是否已创建过相同的div。 于是,上面代码中的js部分就变成了这样:

    var createLoginLayer=(function(){
    	var div;
    	return function(){
    		if(!div){
    			div=document.createElement('div');
    			div.innerHTML="我是登录浮窗";
    			div.style.display="none";
    			document.body.appendChild(div);
    		}
    		return div;
    	}
    })();
    document.querySelector('#loginBtn').onclick=function(){
    	var loginBtn=createLoginLayer();
    	loginBtn.style.display="block";
    }
    

    OK,虽然它还有些许缺点(复用性差),但对于几个功能不冲突的页面来说还算“绰绰有余”,你心满意足地用了ajax/fetch/axios/vue-resource完成了登陆功能。

    但现在麻烦又来了。正如前面所说,你所做工作关联性极大,但你不知道除了header、nav、消息列表、购物车之外,将来还有哪些模块需要用到这些用户信息。但如果他们和用户信息之间产生了强耦合性,就比如你按如下方式写了功能代码:

    login.succ(function(data){
    	header.setAvatar(data.avatar);
    	nav.setAvatar(data.avatar);
    	message.refresh();   //刷新消息列表
    	cart.refresh();   //刷新购物车列表
    });
    

    现在虽然只有登录模块是你负责编写的,但你还要了解header里设置头像的方法叫setAvatar、购物车中刷新页面的方法叫refresh,,,这可不是个好消息 —— 这种耦合会使程序变得“僵硬”。

    试想某一天,这个项目里又增加了一个“收货地址”管理模块。它不是你负责完成的,此时你正在外地度过你一年仅几天的可怜假期,但同事却给你打了一个电话:“Hello,登录后还要麻烦刷新下地址列表!” 于是你不得不打开电脑,找到了不知道几个月前写的那段login.succ的代码片段,在此函数最后加了一句:

    address.refresh();   //刷新地址列表
    

    天哪!这是多可怜的一件事!

    这时你终于想起重构这些代码:你又那么“恰好”的想起了翻看过的 发布-订阅设计模式 。你欣喜若狂。

    我们就会越来越疲于应付一些突如其来的业务要求,正比如大量重复相同且没什么意义的代码。要么跳槽了事,要么必须学会重构。
    使用发布—订阅模式重写之后,对用户信息感兴趣的业务模块将自行订阅登录成功的消息事件。 当登录成功时,登录模块只需要发布登录成功的消息,而业务方接受到消息之后,就会开始进行各自的业务处理,登录模块并不关心业务方究竟要做什么,也不想去了解它们的内部细节。

    改善过后代码如下:

    $.ajax('xxx?login',function(data){
    	login.trigger('loginSucc',data);   //发布登录成功的消息
    });
    
    //各模块去监听消息
    var header=(function(){
    	login.listen('loginSucc',function(data){
    		header.setAvatar(data.avatar);
    	});
    	return{
    		setAvatar:function(data){
    			console.log('设置header头像');
    		}
    	}
    })();
    //...
    

    假如有一天,项目中增加了一个刷新收货地址列表的行为,那么只要在“收货地址”模块里加上监听消息的方法,即可。而这些你就完全不必操心了:

    var address=(function(){
    	login.listen('loginSucc',function(data){
    		address.refresh(data);
    	});
    	return{
    		refresh:function(avatar){
    			console.log('正在刷新...');
    		}
    	}
    })();
    
    展开全文
  • 判断账号重复登录 网站

    千次阅读 2017-01-11 17:14:02
    判断一个网站用户账号是否重复登录,有两种表现形式: 第一种:同一个账号,甲先在自己电脑上登录,正在使用中。。。。,乙又用该账号在另一个地方登录,此时乙能正常登录,甲会被迫下线。  同一个账号,用户甲先...

    判断一个网站用户账号是否重复登录,有两种表现形式:

    第一种:同一个账号,甲先在自己电脑上登录,正在使用中。。。。,乙又用该账号在另一个地方登录,此时乙能正常登录,甲会被迫下线。

               同一个账号,用户甲先登录,输入正确的账号密码,登录成功的同时,由甲发起的登录已经产生了一个唯一的session,只要甲不关闭此次会话(关浏览器),甲登录产生的这个session就不会变,将其放到静态的变量中保存;当用户乙用不同的浏览器或者另一台电脑登录同一个账号,同样会产生一个和乙此次登录相关并且唯一的session,同样将这个session保存到之前的静态变量中。然后只需要再在拦截器里面判断当前用户登录的session与静态变量中的session是否相等,如果不相等,就清空当前登录session,迫使退出登录。


    第二种:同一个账号,甲先登录正常使用中,乙再在另一个地方登录,此时乙不能将甲挤下线,无法登录

              甲登录时,将当前session存在静态变量中,乙去登录时,先判断静态变量中是否有当前账号对应的session值,再判断乙登录时的session于静态变量中的session是否相等,如果不相等,中断请求,在页面做出相应的提示。


           个人觉得第一种方法要常用一些,如果同一个账号,如果在已经登录的情况下被挤下线 ,你可以用同样的方式再登录一次再把别人挤下去,而如果是第二种方式,如果账号被人登录了,而你又必须要登录该账号进行一些操作,就比较麻烦了,因为后面登录的人无法将前面的人挤下线。


           当然,这个得看具体的情况,来选择适合的表现方式。

    展开全文
  • 本文介绍了限制同一用户不能在不同终端上同时登录的解决方案,同时介绍了在同一浏览器上登录多个用户的解决方案。

        这本来是一个可有可无的问题,不过不保证客户是否会有这方面的需求。废话不多说,先来看同一用户不同终端限制登录的解决方法。

    方法很简单,大致思路就是做出userId与sessionId(一个终端对应一个session域,session Id唯一)的键值对,存于全局域application域。用于登录时判断用户是否在别的终端在线。详细代码看图:

        是不是觉得很简单,的确,实现非常容易,不过事情还没有结束。有存入就要有移除,不然关闭后就不能再登录了。当然,仅仅只做正常退出是的移除是不够的,现实中并不能保证所有用户都会乖乖的走你定下的退出流程。大多用户都是直接关闭浏览器了事,因此,这个事后处理还要由我们来做。

        做法同样非常简单,我们来设置一下session域的监听。当有session域销毁的时候,做出移除application中相应键值对的操作,实现代码如下:

    在web.xml下设置监听,顺便设置session的time_out时间。

        以下是监听的实现代码:


        当然,用户点击logout正常退出时记得移除application中相应的键值对,代码这里就不贴了。

        接下来,再来看看同一浏览器多用户登录的问题。这个问题很有意思,同一个浏览器意味着相同的session对象。做web的你相信对session意味着什么肯定是不陌生的。session里面存着当前用户的独有信息,不同的用户登录意味着上一个用户的信息将会被刷掉。因此大多网站的做法都是要么不处理,要么禁止不同用户在同一终端登录,要么当第二个用户登录后,第一个用户再登录被要求重新登录。

        对于这个问题恰好昨天看到了学校的教务系统,没想到它居然实现了这一功能。观察它的url请求才发现它们屁股后面都跟着一个一段小尾巴***.net?userId=###。没错,教务系统的服务器就是根据每个url请求的userId来区分用户的。至于session存储信息的方法,下面是我的设想,当然已经在我的项目上实现。由于代码量大无法贴出下面给出我的解决思路(以我此次项目为例):

        1、用户登录成功,用户信息(我这里只存了用户名)存入session域中键值对字符串“userID”映射的用户List。

        2、用户权限信息存入session域中键值对字符串“power”映射的权限Map,其中Map的key为用户名,value为权限信息。

        3、作拦截器拦截userId为空的请求,转到登录页面。

        如此,便可根据url传来的userId信息获得正确的用户信息实现同一浏览器多用户登录了。当然,这种方法没有特别要求的话博主是不推荐的。如果你有更好的办法,望不吝啬赐教。

        最后,做一下“限制同一用户不能在不同终端上同时登录”功能与“不同浏览器登录同一用户”功能的冲突性分析:

        同一浏览器登录不同用户:登录时不验证                           只使用session不使用application
        不同浏览器登录同一用户:登录时验证sessionId-userId    application使用userSessionMap
        无功能交叉,功能实现互不影响。放心大胆的用吧。

    展开全文
  •  首先,简单说下我遇到的问题是我们的程序调用微信小程序得到openid,然后通过openID得到用户的唯一标识,用户得以登录,然而,当我们调用微信公众号也同样的到openid,同一以用户两个不同的openid,不能区分是否为...
  • Jmeter录制脚本 模拟用户登录操作

    千次阅读 2019-11-29 09:48:28
    模拟用户操作属于面向场景的测试。 准备工作 1.1 建立线程组和HTTP请求 在测试计划中新建线程组,线程组中添加一个HTTP请求,并配置。 1.2 录制控制器 录制控制器用来自动录制脚本:线程组 -> 添加 -> 逻辑...
  • 相同域名,导致cookie冲突

    千次阅读 2018-11-29 09:07:18
    多个系统部署同一台服务器,如果有用到cookie-session,会出现cookie冲突情况,导致先登入的系统被后登入的系统自动覆盖cookie的jsessionid,而导致session失效。 解决方法: 手动设置jsessionid的name 具体措施:...
  • 同一浏览器如何登陆多用户

    千次阅读 2020-01-06 11:14:49
    或者,你 可以安装多个浏览器,在一个浏览器上登录某个帐号,在另一个浏览器上登录另一个帐号。因为,一个浏览器在同一时间同一个域下只允许一个帐号登录。显而易见这种方法太麻烦,而且用户体验不好。 方案二: ...
  • 本文向新的Git用户展示了如何做一些稍微先进但对它的目的至关重要的事情:解决git-merge冲突。 什么是git merge? 在本地分支 ,然后将其代码推送到中心位置。 然后,其他人可以将代码拉回到本地副本,并在合作者...
  • Wireshark入门与进阶系列十二之IP冲突

    千次阅读 2016-10-01 10:39:44
    0x01 局域网检测本地主机IP冲突 1 局域网环境 本地主机为:192.168.5.31 显示过滤器为:!dns and ip.addr == 192.168.5.31 其他设置:【视图】--【解释名称】--【解释网络地址】、【解释物理地址】 判断依据:首先...
  • 例如,本项目中需要处理的数据种类有:收藏,购物车,用户,收货地址,订单,商品,商品类别。 当确定了需要处理的数据的种类之后,就应该确定这些数据的处理先后顺序:用户 > 收货地址 > 商品类别 > 商品 ...
  • 只有8%的人能搞定这些冲突

    千次阅读 2017-08-07 07:09:57
    研发团队里天天有冲突,你能正确处理吗?
  • 问题:之前的官网已经运行着了,并且占用着了80端口,然而新的网站也需要用到80端口,(你不可能让用户登录商城网站,网址后面手动加端口号吧!) 解决:使用Nginx反向代理方式使两者兼容 解...
  • DHCP和IP地址冲突

    千次阅读 2017-11-03 14:53:11
    DHCP和IP地址冲突  由于宿舍增加一些上网的设备,宿舍老是IP地址冲突,各种断线,各种麻烦。原因是DHCP的分配问题。然后由于本人严重的拖延症,路由的设置一直有问题,但一直没去修改路由,趁着今天有时间,...
  • IP地址冲突?如何解决IP地址冲突

    千次阅读 2015-07-16 18:40:53
    你有没有遇到过这种情况:你的设备显示与IP地址冲突有关的错误信息?要是真出现这种情况,你可能发觉连接不上互联网,或者是由于根本无法访问互联网,或者是连接因故无法使用。 AD: 你有没有遇到...
  • eclipse解决git代码冲突

    万次阅读 2017-09-22 10:28:20
    本文主要讲述eclipse解决代码冲突问题,如写的不好,大家多担待你
  • //此方法用来将workbook输出到页面上,提供给用户下载 public static void exportExcel(HSSFWorkbook workBook, HttpServletResponse response, String excelName) throws Exception { //输出文件的格式 ...
  •  服务端的session任然可以正常使用,ASP我没试验过,但是对于网络上很多用php和jsp编写的网站,我发现禁掉cookie,网站的session都无法正常的访问) 问题现象 :  项目A和项目B,部署在同一台服务器下,...
  • 介绍IP冲突 IP地址在一个网络当中必须是唯一的,也就是说,IP地址具有唯一性。比如在一个局域网中,192.168.1.3这个IP只有被用在一台计算机上,如果存在两台计算机或者多台计算机用这个IP,就会出现冲突。出现IP...
  • 互联网线上项目开发最大坑点-并发冲突处理大家可能都有这样的经验,自个儿在家里很多功能很容易实现,一下就做完了,但是在做线上产品的时候,就变得无比复杂,需要花费很多的时间。自己写的程序在家跑,所有的业务...
  • Idea中Git的使用和两种类型的冲突解决

    万次阅读 多人点赞 2017-06-16 17:35:03
    一、Git冲突解决 在idea开发工具中使用Git时,主要用到的快捷按钮如下五个: 这五个按钮的使用说明及在idea中如何配置和使用git可参考...
  • 目前对于系统中常见的一种统计维度就是每天独立的用户访问量及UV,对于此类统计一般有几点需要考虑,第一:数据量很多,如果不做合理的设计,后期在进行聚合处理时会非常麻烦。第二:每天累计的大量数据会对系统存储...
  • 登录网站的保存密码提示框、收藏夹管理页、属性菜单、个人属性等,点开后要么是透明的,要么是白色的看不到字。 如图: 解决办法: 打开浏览器设置菜单,点击高级,选择系统选项,将 使用硬件加速模式(如果可用)...
  • 服务器有其他用途时,不同任务之间文件访问、软件运行可能会产生冲突,新建一个用户,使用独立的用户目录,与其他用户之间的任务间不容易发生冲突,建站的时候顺便温习一下linux的用户相关操作。
  • 产品读书《用户体验要素》

    万次阅读 2018-08-06 14:04:05
    用户体验要素》是一本讲产品的好书,作者为我们清晰地介绍了关于用户体验的五个要素,五个要素是按照产品的整个生命过程来描述的。 产品设计五要素分别是:战略层、范围层、结构层、框架层、表现层。 ...
  • Linux实训——搭建动态网站

    千次阅读 多人点赞 2019-06-20 20:43:40
    三、构建一个简单的动态网站 3.1 实验原理   LAMP是Web服务的经典模型,被命名为其原始四个开源组件的名称首字母缩写,分别为:Linux 操作系统,Apache HTTP服务器,MySQL 关系数据库管理系统和PHP 编程语言。LAMP...
  • 日志采集与用户行为链路跟踪

    万次阅读 2017-08-22 09:20:23
    日志采集这部分内容,其实...不过正如前文提到的,这部分内容,从技术的角度来说,未必有多么高深,但是从业务角度来说,要做到完善却也很难,特别是在分析用户行为链路的场景下,所以这篇专门来讨论一下这一块的内容。
  • 最近做了一个手机端的网站,用到轮播图(可以左右滑动切换上一张或下一张),发现与浏览器左右滑动前进后退发送冲突,导致轮播图无法手动切换。于是开始寻找解决方法: 第一种: document.addEventListener('...
  • 因此你需要手动去解决冲突。首先要在本机安装好命令行工具gitbash,之后用clone拉下你的项目,之后 按照以下命令输入 git checkout -b 某人-master master   git pu
  • 使用Redis记录用户在线状态

    千次阅读 2019-09-18 06:12:03
    现在, 一些论坛网站能够显示用户当前是在线状态还是离线状态。那这个功能是怎么实现的呢?其中一种实现方法就是基于Redis来实现  程序的逻辑非常简单,包括以下几个步骤:  (1).用户登录时,在Redis中添加一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,727
精华内容 37,890
关键字:

网站登录用户冲突