分享

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

 锅锅图书馆gg 2017-11-28

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

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

但这样并不是完全关闭session,所以我们换一种方式去关闭 

http://www.oschina.net/question/5460_12907 这里提供了一种思路,通过自定义的session管理器来禁止Tomcat默认的session策略,在这里我贴出实现的代码:

  1. package com.nosession;  
  2.   
  3. import java.io.IOException;  
  4. import org.apache.catalina.Lifecycle;  
  5. import org.apache.catalina.LifecycleException;  
  6. import org.apache.catalina.LifecycleListener;  
  7. import org.apache.catalina.LifecycleState;  
  8. import org.apache.catalina.Session;  
  9. import org.apache.catalina.session.ManagerBase;  
  10. import org.apache.catalina.util.LifecycleSupport;  
  11.   
  12. public class SessionManager extends ManagerBase implements Lifecycle {  
  13.     protected LifecycleSupport lifecycle = new LifecycleSupport(this);  
  14.   
  15.     @Override  
  16.     public void addLifecycleListener(LifecycleListener listener) {  
  17.         lifecycle.addLifecycleListener(listener);  
  18.     }  
  19.   
  20.     @Override  
  21.     public LifecycleListener[] findLifecycleListeners() {  
  22.         return lifecycle.findLifecycleListeners();  
  23.     }  
  24.   
  25.     @Override  
  26.     public void removeLifecycleListener(LifecycleListener listener) {  
  27.         lifecycle.removeLifecycleListener(listener);  
  28.     }  
  29.   
  30.     @Override  
  31.     protected synchronized void startInternal() throws LifecycleException {  
  32.         super.startInternal();  
  33.         setState(LifecycleState.STARTING);  
  34.         setDistributable(true);  
  35.     }  
  36.   
  37.     @Override  
  38.     protected synchronized void stopInternal() throws LifecycleException {  
  39.         setState(LifecycleState.STOPPING);  
  40.     }  
  41.   
  42.     @Override  
  43.     public int getRejectedSessions() {  
  44.         return 0;  
  45.     }  
  46.   
  47.     public void setRejectedSessions1(int i) {  
  48.     }  
  49.   
  50.     @Override  
  51.     public void load() throws ClassNotFoundException, IOException {  
  52.     }  
  53.   
  54.     public void setRejectedSessions(int arg0) {  
  55.   
  56.     }  
  57.   
  58.     @Override  
  59.     public void unload() throws IOException {  
  60.     }  
  61.   
  62.     @Override  
  63.     public Session createSession(String sessionId) {  
  64.         // TODO 关键位置  
  65.         return null;  
  66.     }  
  67.   
  68.     public Session createSession() {  
  69.         // TODO 关键位置  
  70.         return null;  
  71.     }  
  72.   
  73.     @Override  
  74.     public Session createEmptySession() {  
  75.         // TODO 关键位置  
  76.         return null;  
  77.     }  
  78.   
  79.     @Override  
  80.     public void add(Session session) {  
  81.   
  82.     }  
  83.   
  84.     @Override  
  85.     public Session findSession(String id) {  
  86.         return null;  
  87.     }  
  88.   
  89.     @Override  
  90.     public void remove(Session session) {  
  91.         remove(session, false);  
  92.     }  
  93.   
  94.     @Override  
  95.     public void remove(Session session, boolean update) {  
  96.   
  97.     }  
  98.   
  99.     @Override  
  100.     public void processExpires() {  
  101.     }  
  102. }  


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

  1. <span style="font-size:14px;"><Manager className="com.nosession.SessionManager" /></span>  
然后重启Tomcat,大功告成,Session再也没有用了,就算在jsp中设置session=true或者request.getSession(true);也无法使用session。如果你有更好的方式可以联系我!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多