一朋友说要修改tomcat的session cookie name,我翻了一下tomcat各个版本的源码(tomcat4已经没人用了,所以除外),帮朋友解决了问题,现总结了一下
修改后效果
1、tomcat5修改方法
在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数
linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘
win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“
2、tomcat6和tomcat7修改方法相同
在Context容器标签上增加sessionCookieName参数
<Context path=”/” docBase=”webapp” reloadable=”false”sessionCookieName=”yoursessionname”></Context>
3、为啥这样就好用呢?
tomcat5时增加参数对所有Context生效,影响甚大,所以到以后的版本就仅针对Context设置了
tomcat5源码如下
public final class Globals
/**
* The name of the cookie used to pass the session identifier back
* and forth with the client.
*/
public static final String SESSION_COOKIE_NAME =
System.getProperty(“org.apache.catalina.SESSION_COOKIE_NAME”,
“JSESSIONID”);
tomcat6和tomcat7的源码差不多,如下
public class StandardContext
….省略若干
/**
* The name to use for session cookies. <code>null</code> indicates that
* the name is controlled by the application.
*/
private String sessionCookieName;
/**
* Gets the name to use for session cookies.
*
* @return The value of the default session cookie name or null if not
* specified
*/
public String getSessionCookieName() {
return sessionCookieName;
}
/**
* Sets the name to use for session cookies. Overrides any setting that
* may be specified by the application.
*
* @param sessionCookieName The name to use
*/
public void setSessionCookieName(String sessionCookieName) {
String oldSessionCookieName = this.sessionCookieName;
this.sessionCookieName = sessionCookieName;
support.firePropertyChange(“sessionCookieName”,
oldSessionCookieName, sessionCookieName);
}
PS:需要修改其它参数可以直接翻看源代码或查看tomcat在线文档
出自my blog 宣传一下,嘿嘿
分享到:
相关推荐
当用户访问一个需要会话支持的Web应用时,服务器会在响应中通过Set-Cookie头部将`jsessionId`发送给客户端(通常是浏览器或Android应用),客户端则将其保存在Cookie中,并在后续的请求中自动附带这个标识,以便...
例如,在 Tomcat 容器中,可以在 conf 文件夹下找到 context.xml 文件,并将 `<Context>` 修改为 `<Context sessionCookiePath="/">`。然后,在 server.xml 文件中,在 `<Connector>` 中加入 `emptySessionPath=...
IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来...
- **作用**: 防止Cookie信息在传输过程中被窃听或篡改,提高了传输过程的安全性。 - **适用场景**: 对安全性要求较高的网站,如银行、支付平台等。 ##### 2. `httpOnly`属性 - **定义**: 如果Cookie设置了`httpOnly...
如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,...
然而,当使用像Nginx这样的反向代理服务器进行负载均衡时,用户可能会被分配到不同的Tomcat实例上,由于Session信息存储在单个服务器的内存中,因此会导致用户在不同服务器间切换时Session丢失,从而引发登录状态...
这里,`$cookie_JSESSIONID`表示根据用户cookie中的JSESSIONID来确定服务器,`consistent`则确保哈希算法的稳定性。 **session共享的优势** 1. **高可用性**: Redis提供了复制和哨兵监控等机制,增强了session数据...
总结来说,Tomcat中的Session是通过Session ID(JSESSIONID)作为标识,结合Cookie在客户端和服务器之间传递,实现对用户会话状态的跟踪。了解这些原理对于优化Web应用性能、处理会话管理问题以及确保用户安全性至关...
- 在Tomcat的`web.xml`配置文件中添加一个`Manager`元素,配置为`org.apache.catalina.session.PersistentManager`,并指定session存储为Redis。你需要提供Redis服务器的IP地址、端口和key前缀等参数。 ```xml ...
在Tomcat的`conf/server.xml`文件中,修改`<Engine>`或`<Host>`标签下的`<Manager>`元素。配置为以下内容,以使用RedisSessionManager: ```xml host="localhost" port="6379" database="0" password="" ...
4. **Session共享原理**:通过在Tomcat中集成一个session管理器,如`Tomcat-Redis-Session-Manager`,将session数据持久化到Redis中。每次用户请求到达时,服务器首先检查本地是否有该session,如果没有则从Redis中...
1. **依赖关系**:Session通常依赖于Cookie中的jsessionid来标识用户。当服务器找不到客户端的jsessionid或者对应的Session过期或已被销毁,服务器会创建新的Session对象。 2. **创建时机**: - 第一次请求时,...
在session共享的场景下,Tomcat服务器会将用户的session数据存储到Redis中,而不是本地的JSESSIONID,这样无论用户请求哪个Tomcat实例,都可以从Redis中获取到相应的session信息。 在实际操作中,我们需要进行以下...
在Web应用中,当用户登录后,服务器会在用户的浏览器上设置一个名为JSESSIONID的Cookie,用来跟踪用户的会话。这个ID被用来在服务器端查找对应的Session对象,存储用户的会话信息,如登录状态、购物车等。然而,当...
3. **使用cookie**:在cookie中存储session ID,每次请求时携带,Apache通过stickysession指令将请求定向到对应的Tomcat实例。 通过以上配置,我们可以构建一个高可用、负载均衡的Web服务系统。在实际操作中,还...
对于 `nginx`,配置 `proxy_set_header` 指令将 `JSESSIONID`(或自定义的 `cookie` 名称)传递给后端: ```nginx location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-...
同时,还需要在每个Tomcat实例中添加支持session共享的jar包,这些jar包可能包括`jedis.jar`(用于Java操作Redis)和`tomcat-redis-session-manager.jar`(Tomcat的Redis session管理器)。 2. **配置Tomcat**:在`...