9.两个应用部署在同一个服务器中,处理串用session_id的问题(如果设置了拦截器,其中一个应用退出后,另一个也会被退出)

公司有两个浏览器的应用,都部署的同一服务器的不同端口上。后发现,我同时登陆两个系统,然后退出其中一个,另一个也会跟着被退出。我猜测应该是cookie或者session的问题,于是试着修改cookie中两个应用相同的字段名,修改拦截器中的验证字段。但是都没有效果,后来再网上找到一篇处理此问题类似的博文,于是照着方法做了调整成功处理。于是在此做下记录。

一、分析问题(本人比较菜,如有不对的地方请指正):

  由于http连接是无状态的,所以我们需要一个独一无二的标识来标志每个用户的登录状态,这样就能在跳转页面的时候,继续处理该用户的数据了。而这个东西就是session了。session是存储在服务器中的。每次用户连接上系统时,服务器就会给该用户分配一个独一无二的session_id,用于标识该用户(一般会设置session过期时间,或者用户主动退出,不然内存一直不释放,会导致内存泄露)。

  接下来我们来分析一下产生这个问题的流程。首先我们在A应用中登录,这时候服务器给分配了一个唯一的session_id_01,服务器接着把session_id_01以"MASSESSION"这个字段名封装在cookie中(被框架二次封装过,名称可能与其他框架不一样),用于浏览器下一次请求时做检验。这时候,我们再登录B应用中,服务器同样分配了一个唯一的session_id_02,同样服务器还是接着session_id_02以"MASSESSION"这个字段名封装在cookie中,然后返回给浏览器。问题就出在这里,由于是同一域名,所以第二次的cookie中的"MASSESSION"会把第一次的给覆盖掉。接下来在B应用中我们选择退出。这时候服务器就会将session_id_02,给清除了。然后我们再去操作A应用,这时候的A应用中的cookie中的"MASSESSION"已经是被B应用中的"MASSESSION"覆盖过的。这时候,我们在A应用中操作时,会把session_id_02对应的"MASSESSION"给传回服务器。这时候,服务器的session_id_02对应的"MASSESSION"已经被清除了,必然是无法完成校验的,这时候就会被踢出A应用。

ps:浏览器的cookie有一个domain属性,该属性保存着这个cookie是哪个服务器使用的(根据域名区分),这样当浏览器去请求不同服务器就可以选择合适的cookie带到后台了.

二、处理方法:

  给cookie设置参数的时候,给cookie取不同的名称,让服务器做区分。这样就能解决这个问题了。

  

原文地址:https://www.cnblogs.com/Nick-Hu/p/10846138.html

时间: 2024-11-25 17:32:22

9.两个应用部署在同一个服务器中,处理串用session_id的问题(如果设置了拦截器,其中一个应用退出后,另一个也会被退出)的相关文章

Autofac 设置方法拦截器的两种方式

前提 1.Nuget安装Autofac 4.0以下版本  4.0及4.0 以上版本暂时没找到合适的方案 2.Nuget安装Autofac.Extras.DynamicProxy2 3.创建一个类似下面代码得 拦截类 public class TestInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { string c = string.Format("Calling method {0} wit

Spring @Cacheable注解 && 事务@Transactional 在同一个类中的方法调用不生效

@Cacheable 注解在对象内部调用不会生效 代码示例:ProductServiceImpl.java public List<ProductInfoVO> getProductList(CommonRequest<ProductInfoDTO> reqest) { // @Cacheable失效,不会走缓存的 return this.findProductInfoList(reqest); } @Cacheable(cacheNames = "productInfo

部署PowerBI报表服务器(本地)

之前给大家介绍了PowerBI Desktop可以制作很多很实用的报表BI分析,今天我给大家介绍部署本地的PowerBI报表服务器,让做好的报表可以发布在公司的内部服务器上进行分享和展示,当然除了本地的PowerBI报表服务器以外,您也可以购买了PowerBI Online服务(公有云服务),也是可以直接利用PowerBI Desktop发布到云端进行分享和展现的,当然这里可以设置访问分享权限,其次还可以实现混合部署. 云端的PowerBI和本地版的PowerBI报表服务器从功能上还是存在一定区

大数据技术之_10_Kafka学习_Kafka概述+Kafka集群部署+Kafka工作流程分析+Kafka API实战+Kafka Producer拦截器+Kafka Streams

第1章 Kafka概述1.1 消息队列1.2 为什么需要消息队列1.3 什么是Kafka1.4 Kafka架构第2章 Kafka集群部署2.1 环境准备2.1.1 集群规划2.1.2 jar包下载2.2 Kafka集群部署2.3 Kafka命令行操作第3章 Kafka工作流程分析3.1 Kafka 生产过程分析3.1.1 写入方式3.1.2 分区(Partition)3.1.3 副本(Replication)3.1.4 写入流程3.2 Broker 保存消息3.2.1 存储方式3.2.2 存储策

C# 之 FTP服务器中文件上传与下载(三)

通过上一篇博客<C# 之 FTP服务器中文件上传与下载(二)>,我们已经实现将文件上传到我们创建的FTP服务器.今天我们就一起来看看怎么样实现从FTP服务器中下载我们所需要的文件.         我们想实现的效果是在页面上有一个超链接,超链接显示为我们想要下载的文件名.点击该文件名进入下载页面.首先我们在前台插入一个超链接,但是这个超链接为后台拼接的超链接. using System; using System.Collections.Generic; using System.Linq;

两个springboot项目如何部署在同一个服务上,两个spring启动应用程序部署在同一台服务器上

现在有两个spring boot的maven项目,需要部署到同一个外部的服务上(tomcat),他们都包含spring-boot-starter-actuator(健康检查)的依赖,但是出现下面的异常 我有多个spring引导应用程序(maven项目),其中包含“spring-boot-starter-actuator”依赖项,用于检查每个应用程序的运行状况.在tomcat服务器中部署这两个应用程序时,我会得到以下异常 2016-05-02 22:30:44.627 ERROR 12734 --

如果两个人,两台电脑同时登录同一个帐号,同时对同一个账单提交,账单同时被服务器处理,那服务器应该先处理谁的,或者怎么规避这个问题。 非单点登录,重定向,stoken拦截器的问题

方法一:给用户设置个状态 服务器端坐标记,比如数据库中增加一列,标识是否登陆,登录时先判断这个就行了,不过要考虑非正常退出的情况 http 方法二:在用户表里面 多加一个状态字段,登录成功 改变状态      每次登录时 都检测下 当前用户的登录状态 如果是已登录状态 则拒绝登录 方法三:这个太简单那了 登录的时候 就赋值一个状态给 数据库(数据库有个状态字段)及改变数据库里的状态为登录中 如果别人访问的这个账号的时候 获取的状态为登录中 则不能重复登录  (缺点:这样做把浏览器cookie清空

CDH4安装部署系列之三-服务器规划

1             Namenode规划说明: 由于Namenode非常重要,一旦丢失数据或停止工作,整个集群就不能恢复了,所以一般来说,Namenode单独安装在一台服务器上,且两个Namenode分开部署.由于ZKFC负责监控Namenode的状态信息,所以每一台Namenode上必须安装ZKFC 2             Journalnode规划说明: 由于Journalnode对系统资源消耗较少,一般Journalnode可以与别的服务搭建在一起.Journalnode必须至

将 Django 应用程序部署到生产服务器

原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比较有启发性质的一篇文章,会避免很多弯路 Django 是一个基于 Python 的开源 Web 应用程序框架,其目的是使创建数据库驱动的 Web 站点和 Web 应用程序更加容易.开发 Django 应用程序很简单,因为该框架包含了一个开发 Web 服务器.但是这个框架不适合在生产环境中使用,因此需要进一步将 Django 应用程序部署到 Web.在本文中,您将了解