用户登陆问题,session.invalidate销毁session

  • 博客分类:
  • java
JavaApacheStrutsTomcatServlet 
用户第一次登陆,可以登陆,点退出,调用session.invalidate,然后再次登陆,正常登陆,然后再点退出,这是第二次点退出第三次进行登陆,这时在登陆的时候就会报错了,java.lang.IllegalStateException: invalidate: Session already invalidated 
全部异常为:

2007-12-24 15:56:00 org.apache.catalina.core.StandardWrapperValve invoke 
严重: Servlet.service() for servlet action threw exception 
java.lang.IllegalStateException: invalidate: Session already invalidated 
    at org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:1086) 
    at org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:149) 
    at struts.form.SessionDestroy.setSession(SessionDestroy.java:34) 
    at struts.form.UserLoginForm.validate(UserLoginForm.java:41) 
    at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:928) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:204) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at struts.form.FilterEncoding.doFilter(FilterEncoding.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at java.lang.Thread.run(Thread.java:595)

这个原因我一开始还以为是超时了什么的呢,后来经测试才知道,是因为用了session.invalidate(),session.invalidate的销毁是把这个session所带的用户彻底的销毁,这个session跟用户已经紧密联合在一起,所以就一起销毁了,这样就算换了个session,也是登陆不了的,以前我的代码就是这样写的,下面:

Java代码  
  1. ((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session

这样销毁的可是userName啊,所以要注意,销毁session的时候绝对不能用这种形式,可以用下面的销毁来控制用户没有登陆的话不可以浏览网页和后退也不能进行操作,把上边的代码改成下边的一句就搞定:

Java代码  
  1. session.removeAttribute("sessionUserName");

移除用户,但session不变,下次登陆的时候看到的sessionID还是一样的

用户登陆问题,session.invalidate销毁session相关推荐

  1. session.invalidate()和session.removeAttribute()的区别

    1.理清概念 要明白这两个方法的区别,首先需要弄清楚这两个对象的概念. 1.1.关于session session是一种保存在服务端的,用于记录用户状态的对象. 用户状态可能有很多种,如登录用户名,登 ...

  2. php session 释放,php中删除Session和销毁Session的方法

    删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问.session_start(); $_SESSION['name'] = 'jobs'; ...

  3. 将登录等信息保存到session中和退出session

    做项目时,可能会将某些信息保存在session中,如登录等信息,这样方便在某些页面使用这些保存的信息. 要想保存这些信息,需要创建一个类,该类里面定义需要保存的变量等信息,当登录后就通过new一个该类 ...

  4. JavaWeb 基于Session的用户登陆注销实现

    通过Session来存储用户的部分登陆信息来验证用户是否在线,这应该时最容易实现的一种Web端方案,本文以SSM(Spring.SpringMVC.myBatis)框架为载体,来具体实现这套登陆系统. ...

  5. javaweb实现单点登录,防止重复登录,获取sessionid,对session及时销毁回收,只允许一个用户登录,结合struts2实现

    首先我们目的是实现一个单点登录,即只允许单个账户单个登录. 实现异地与同地登录判断 要将先登录的用户强制下线.不免用到session. 单点登录的最大难题:已经登录且重复登录的用户的session怎么 ...

  6. session实现用户登陆功能

    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...

  7. php销毁session退出登陆笔记

    PHP退出登陆需要三步骤: 1.清空session $_SESSION=array(); 2.销毁客户端设置的cookie setCookie("PHPSESSID"," ...

  8. Javaweb之session创建销毁问题

    1.session创建销毁 昨天遇到一个很 * 疼的问题,在登录servlet里创建session,登陆进去之后在请求别的界面Sesion值就变空了,在这里纠结了一下午,哎...最后看了下面这篇文章, ...

  9. 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式

    一.认证流程 基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发 给客户端 sesssion_id 存放到 cookie 中,这样用客 ...

  10. java 主动销毁session,关于java:问题Session的销毁方式到底有哪些

    问题:Session的销毁形式到底有哪些? Session,作为咱们离不开的后盾的技术,它的呈现次要是为了解决 Http 协定的无状态特点,用于解决用户状态的存储问题,而往往对于存储来说都会波及到一个 ...

最新文章

  1. Hi3516ampp编译错误之ls: cannot access '/hiwork/osdrvhi3516a.C02': No such file or directory
  2. POJ-1002 解题报告
  3. Java中实现使用split方法分隔字符串
  4. vi和vim命令行编辑器命令
  5. confluence正常安装网页报错_NAS折腾手记1:在OMV5上安装ZFS On Linux的正确步骤
  6. iPhone比小米贵3000,贵在哪里?
  7. 【POJ - 1724 】ROADS (带限制的最短路 或 dfs 或 A*算法,双权值)
  8. 【python】有意思的python小项目GitHub地址汇总
  9. tensorflows十五 再探Momentum和Nesterov's accelerated gradient descent 利用自动控制PID概念引入误差微分控制超参数改进NAGD,速度快波动小
  10. python遍历链表_四种常见链表的实现及时间复杂度分析(Python3版)
  11. 为什么java IO类不用基于继承的设计方案?
  12. C# 6 的新特性~
  13. 初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!
  14. 如何选择网页更新提醒工具
  15. AI换脸正在发酵,有人抖音玩“蚂蚁呀嘿”,有人已经创业拿到300万美元融资...
  16. 51Talk-Level 7 Unit 1 L2
  17. 智能交通系统(ITS)
  18. Problem A: 薪酬计算
  19. 解决由于intelRST问题导致无法安装ubuntu
  20. win10笔记本电源的高性能找不到

热门文章

  1. [渝粤教育] 无锡商业职业技术学院 信息技术基础 参考 资料
  2. linux卸载xmind,Ubuntu下安装Xmind
  3. Louvain、Lpa、Infomap算法
  4. matlab2010b显示激活界面_【转】Matlab2010b许可证过期问题,反复提示激活
  5. 惠普打印机墨盒更换教程_惠普打印机安装步骤 打印机墨盒加墨方法
  6. 计算方法(一):误差
  7. sqk-maven-plugin 插件样例
  8. 乌龟GIT的合并代码
  9. 【产品】保险业务收付管理系统概要
  10. 基于Servlet的学生管理系统