JSP关于session.removeAttribute问题

请问各位这个

session.removeAttribute("un");

不是把un的值删除了吗,为什么后面

<h1>


```标签里还能获取到un的值?

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/952107580386151.png "#left")
<%
    String un = (String) session.getAttribute("name");
    if (un == null) {
        response.sendRedirect("login.jsp");
    }
    session.removeAttribute("un");
    %>
    sessionID:<%=session.getId()%>
    <h1>
        欢迎<%=un%>登录本网站
    </h1>

```

标签里获取的是字符串变量 un,其值来自session.getAttribute("name")。与session.removeAttribute("un");无关

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/363257
  • 除此之外, 这篇博客: JSP详解(5) -内置对象之session中的 7. removeAttribute()方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • void removeAttribute(String key)
    //通过键删除对应的数据
    
  • 以下回答由chatgpt基于相关博客总结生成:

    在JSP页面中使用session.removeAttribute("un")代码可以删除session中名为"un"的属性。但是,有可能在删除之后,通过session.getAttribute("un")仍然能够获取到该值,原因是可能存在多个不同的session对象。如果在代码中创建了多个session对象,在其中一个session对象中删除了"un"属性,但是在另一个session对象中仍然可以获取该值。

    为了避免这种情况的发生,可以在获取session对象时使用getSession(false)方法,传入false参数可以在不存在session对象时返回null,避免创建多个session对象。具体使用方法如下:

    HttpSession session = request.getSession(false); //获取session对象,如果不存在则返回null
    if(session != null) {
        session.removeAttribute("un"); //删除名为"un"的属性
    }
    

    如果仍然存在问题,建议查看代码中是否存在多个session对象的创建或使用,以及在不同页面或请求中使用了不同的session对象。