首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保持session.attribute从jsp到servlet

问如何保持session.attribute从jsp到servlet
EN

Stack Overflow用户
提问于 2018-11-20 13:50:47
回答 2查看 1.2K关注 0票数 0

我有一个Login Servlet,在该Servlet中,我将属性用户设置为日志:

代码语言:javascript
复制
protected void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException 
                              ... OMITTED
    request.getSession().setAttribute("user", user_name);
    request.getRequestDispatcher("index.jsp").forward(request, response);
                              ... OMITTED
    }

从index.jsp到quit.jsp,直到这里,我可以访问通过getAttribute()登录的用户。但是在我的quit.jsp中,我只要求用户输入密码并调用退出Servlet。问题是,在退出Servlet中,当我尝试访问使用getAttribute()记录的当前用户时,属性" user“为null。因此,我的问题是:如何使用在servlet中创建的将在jsp和servlet中使用的持久属性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-20 18:18:25

你的问题可能不是那么容易解决。我也有过类似的情况,所以我可以给你们一些调查建议:

null数据的原因是,当会话(存储属性的位置)死亡、超时,因为同一个用户发出新的Login帖子,所以会重新创建会话数据,除非您将它作为session_id存储在持久存储中,例如用户浏览器上的Cookie,或者每个用户的数据库中,但实现起来可能非常复杂。

作为捷径:

查看HttpServlet中的此方法文档: getThreadLocalRequest().getSession(false);

这也可以解决你的问题:

request.getSession().setMaxInactiveInterval(3600);//最大间隔(以秒为单位)在无效会话之前的调用之间。这意味着,一个小时后,您将需要自动注销您的用户(或强迫他重新登录),以防止出现null。

注销时会打电话:

Session.removeAttribute(“属性”);session.invalidate();

还请注意,您提到有两个不同的servlet(在Tomcat web.xml??中定义)。一个是登录,另一个是退出,它们都响应POST/GET。我认为它们有两个不同的实现,并且我认为它们不共享同一个会话对象。因此,在这种情况下,您可能必须在同一个servlet中实现Login + Quit操作,并有一个适当的会话无效时间间隔。

票数 0
EN

Stack Overflow用户

发布于 2018-11-20 16:58:01

在JSP文件中,默认情况下,HttpServletRequest可以使用变量名称request。您也可以在JSP文件中使用同样的方式。

所以

request.getSession().setAttribute("user", user_name);

也可以在JSP文件中找到。

代码语言:javascript
复制
<%
request.getSession().setAttribute("user", user_name);
%>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53394496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档