问题描述
我用监听器统计在线用人数和在线会员,结果出问题。publicfinalclassCouterListenerimplementsHttpSessionAttributeListener,HttpSessionListener,ServletContextListener{publicvoidattributeRemoved(HttpSessionBindingEventevent){Stringattributekey=event.getName();HttpSessionhs=(HttpSession)event.getSession();if(hs!=null){Stringsid=(String)hs.getId();if(attributekey.equalsIgnoreCase("userinfo")){deleteUser(sid);}}}}就在这个方法内出了问题,总是抛出例外:2009-02-0709:43:45:ERRORContainerBackgroundProcessor[StandardEngine[Catalina]]org.apache.catalina.core.ContainerBase.[Catalina].[127.0.0.1].[/]-Sessionattributeeventlistenerthrewexceptionjava.lang.IllegalStateException:getId:Sessionalreadyinvalidatedatorg.apache.catalina.session.StandardSession.getId(StandardSession.java:328)atorg.apache.catalina.session.StandardSessionFacade.getId(StandardSessionFacade.java:78)atcom.bl.filter.CouterListener.attributeRemoved(CouterListener.java:197)atorg.apache.catalina.session.StandardSession.removeAttributeInternal(StandardSession.java:1628)atorg.apache.catalina.session.StandardSession.expire(StandardSession.java:737)atorg.apache.catalina.session.StandardSession.isValid(StandardSession.java:577)atorg.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:678)atorg.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:663)atorg.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1283)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)atjava.lang.Thread.run(UnknownSource)我的系统采用jdk6.0,tomcat5.5,这个listener在我的本地机上使用没有问题,但是我传到我的空间商的服务器上,去总有这个问题。我真是没有折了。恳请高人指点!
解决方案
解决方案二:
session无效啊
解决方案三:
是啊,session无效,但是我不知道为什么会无效
解决方案四:
是啊,session无效,但是我不知道为什么会无效
解决方案五:
是啊,session无效,但是我不知道为什么会无效
解决方案六:
publicfinalclassCouterListenerimplementsHttpSessionAttributeListener,HttpSessionListener,ServletContextListener{privateSessionhs;publicvoidsessionCreated(HttpSessionEventse){this.hs=se.getSession();}publicvoidattributeRemoved(HttpSessionBindingEventevent){if(hs!=null){Stringsid=(String)hs.getId();if(attributekey.equalsIgnoreCase("userinfo")){deleteUser(sid);}}}}这样试试呢