您的位置:首页 > 运维架构 > Tomcat

Tomcat如何禁用session(Turn off the Session in Tomcat )

2016-06-07 20:27 465 查看
        有时候我们不需要用到session,而session在tomcat中是属于关键功能,它在启动的时候会自动创建,这样就会消耗一定的内存空间,如果访问量大了session就会产生很多。这样也不利于我们进行分布扩展。

平时大家关闭session 会用到

<%@ page session="false" %>
或者
request.getSession(false);


但这样并不是完全关闭session,所以我们换一种方式去关闭 
http://www.oschina.net/question/5460_12907 这里提供了一种思路,通过自定义的session管理器来禁止Tomcat默认的session策略,在这里我贴出实现的代码:

package com.nosession;

import java.io.IOException;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleListener;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.Session;
import org.apache.catalina.session.ManagerBase;
import org.apache.catalina.util.LifecycleSupport;

public class SessionManager extends ManagerBase implements Lifecycle {
protected LifecycleSupport lifecycle = new LifecycleSupport(this);

@Override
public void addLifecycleListener(LifecycleListener listener) {
lifecycle.addLifecycleListener(listener);
}

@Override
public LifecycleListener[] findLifecycleListeners() {
return lifecycle.findLifecycleListeners();
}

@Override
public void removeLifecycleListener(LifecycleListener listener) {
lifecycle.removeLifecycleListener(listener);
}

@Override
protected synchronized void startInternal() throws LifecycleException {
super.startInternal();
setState(LifecycleState.STARTING);
setDistributable(true);
}

@Override
protected synchronized void stopInternal() throws LifecycleException {
setState(LifecycleState.STOPPING);
}

@Override
public int getRejectedSessions() {
return 0;
}

public void setRejectedSessions1(int i) {
}

@Override
public void load() throws ClassNotFoundException, IOException {
}

public void setRejectedSessions(int arg0) {

}

@Override
public void unload() throws IOException {
}

@Override
public Session createSession(String sessionId) {
// TODO 关键位置
return null;
}

public Session createSession() {
// TODO 关键位置
return null;
}

@Override
public Session createEmptySession() {
// TODO 关键位置
return null;
}

@Override
public void add(Session session) {

}

@Override
public Session findSession(String id) {
return null;
}

@Override
public void remove(Session session) {
remove(session, false);
}

@Override
public void remove(Session session, boolean update) {

}

@Override
public void processExpires() {
}
}

用该代码单独创建一个工程,并导出为jar文件,并把导出的jar文件放到Tomcat的lib文件夹中,然后修改配置文件context.xml,修改环境Manager节点为如下内容:

<span style="font-size:14px;"><Manager className="com.nosession.SessionManager" /></span>
然后重启Tomcat,大功告成,Session再也没有用了,就算在jsp中设置session=true或者request.getSession(true);也无法使用session。如果你有更好的方式可以联系我!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat session java jsp j2ee