由于现在的浏览器在对同一ip不同端口的cookie保存时,并没有区分不同端口的session信息。那么当我们时同开启两个tomcat进行开发时,由于用户验证信息是通过session进行保存的。那么就会出现,在同一个机器布置两个系统A和B,当用户A登陆A系统并成功之后,用户B登陆B系统之后,再回到A系统,当进行点击时,就会提示A用户已经不存在了,即相应的session信息已经不存在了。
java的web系统,一般是通过jessionid来进行session标识的,即A系统和B系统均会与客户端进行jsessionid的信息交互。但由于这两个系统是在同一个ip上,所以客户端的浏览器并不能区分每一个jessionid与不同的系统之间的关系。相反,他会将后来的jessionid覆盖前一个cookie信息,即后面的登陆时,jessionid会将A系统的jsessionid信息覆盖掉,再请求A系统时,客户端就会发送系统B的jsessionid至A系统,这样A系统肯定会取不掉最开始的session信息,而被认为是新登陆了。
解决的办法就是两个系统使用不同的session标识来保存信息,从tomcat7开始,为兼容j2ee规范,tomcat提供了一套标准的设置sessioncookiename的方法。即在整个tomcat下的conf目录下的context.xml中添加一个属性即可。官方原话如下:
org.apache.catalina.SESSION_COOKIE_NAME system property: This has been removed. An equivalent effect can be obtained by configuring the sessionCookieName attribute for the global context.xml (in CATALINA_BASE/conf/context.xml).
即在tomct7之前也可以设置Sessioncookiename,不过在tomcat7之中,可以通过设置tomcat conf目录下的context.xml添加一个属性即可。如下所示:
<!-- 这里重写session cookie name,以防止同一IP下多个端口访问时,session失效 -->
<Context sessionCookieName="tomcat7utf8_session">
这样即可(本以为是添加参数parameter或子结点,结果都不是,只需要在顶层的context节点上增加一个属性即可)
这样在tomcat启动后,相应的sessionId标识就是变成这里设置的了。
对于Intellij idea来说,因为这里设置的是整个tomcat的,所以intellij idea在复制tomcat配置的时候,会将这个配置一并的copy至相应的intellij tomcat配置下面。所以在intellij idea下开发项目时,不用担心这个配置会被删去。
这样,通过intellij idea启动两个项目(分别是两个tomcat时),因为不同的tomcat的session标识不一样,再也不会出现session丢失的问题了。
ps:之前在oschina上有提出在单个的context下添加配置也可以,这里未做测试,只因为如果在tomcat/conf/server.xml中配置其他项目时,在intellij中进行配置文件copy时,自定义的配置会被删去导致失效的问题。
分享到:
相关推荐
在 IntelliJ IDEA 中配置 Tomcat 服务器是为了能够在开发过程中部署和运行您的 Java Web 应用程序。下面是配置 Tomcat 的基本步骤: 下载和安装 Tomcat: 首先,您需要从 Apache Tomcat 的官方网站...
intellij idea 集成tomcat
IntellijIdea配置Tomcat[整理].pdf
Intellij Idea 13.1 +tomcat server 配置热部署 配置好后,修改jsp文件;马上生效。
Intellij IDEA汉化包。支持最新版本2018.直接复制lib即可。file-seting可用。 设置下菜单可正常打开。
Intellij IDEA整合Tomcat手册
IntelliJ IDEA不重启tomcat,自动部署 热发布Spring Boot
NULL 博文链接:https://buliedian.iteye.com/blog/858026
介绍在IntelliJ IDEA 里配置本地的TomCat 9.0服务器,前提是TomCat 9.0服务器已经正确安装并配置
IntelliJ IDEA是java编程语言开发的集成环境,不过官方是英文版的,这是一个汉化包,下载后放至IntelliJ IDEA安装目录的lib目录下就行,重新启动程序就是中文了。
IntelliJ IDEA 中文指南
vscode-intellij-idea-keybindings, vs 代码的IntelliJ IDEA 键绑定端口 用于 Visual Studio 代码的 IntelliJ IDEA 键绑定 vs 代码的IntelliJ IDEA 键绑定端口。 包括 keymaps,WebStorm,PyCharm,PHP Storm等流行...
图解Intellij IDEA 入门教程,简单看得见,轻轻松松成为java开发高手
史上最简单的 IntelliJ IDEA 教程
目录(Contents) 1.IntelliJ IDEA 介绍 2.本教程介绍 3.Windows 下安装 ...27.IntelliJ IDEA 常用设置 28.IntelliJ IDEA 常用快捷键讲解 29.IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用 30.本教程总结
resources_cn_IntelliJIDEA_2017.3.1_r2.jar resources_cn_IntelliJIDEA_2017.3.2_r1.jar resources_cn_IntelliJIDEA_2017.3.3_r2.jar ...下载解压后将对应的jar包放到idea安装目录下的 /lib/ 中,重启idea即可
idea使用教程 IntelliJ IDEA 使用教程 ,IntelliJ IDEA 使用教程
IntelliJ IDEA 2020.1.4 x64官方
IntelliJ IDEA安装详解配置教程