gpt4 book ai didi

java - 如果 session 在运行时被替换,Jetty 不会删除超时 session

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:32 25 4
gpt4 key购买 nike

在应用程序中,我们用于在用户模式更改后切换 session 。

所以基本上我们有这样的东西:

request.getSession(false).invalidate();
request.getSession(true);

现在出现问题:超时后, session 没有被删除。在调试一些内部代码后,我发现在 org.eclipse.jetty.server.session.AbstractSession.timeout() 中,如果 _requests > 0 则 session 不会被删除。并且 _requests 大于零,因为在 org.eclipse.jetty.server.session.SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) 中,在 access session 上运行的 complete() 会增加,而同一 session 会减少,即使在调用期间实际 session 已被替换!

有人遇到过同样的问题并设法解决吗?

更新:我创建了一个解决方法。请参阅下面已接受的答案。

更新:泽西社区中的错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=377610

最佳答案

我已经通过重写 SessionHandler 解决了这个问题:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.session.SessionHandler;

public class MySessionHandler extends SessionHandler {

@Override
public void doScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

HttpSession oldSession = request.getSession(false);
super.doScope(target, baseRequest, request, response);
HttpSession newSession = request.getSession(false);

if (newSession != null && oldSession != newSession) {
getSessionManager().complete(newSession);
}
}
}

在应用程序的上下文中:

<Set name="sessionHandler">
<New class="*************.MySessionHandler">
</New>
</Set>

关于java - 如果 session 在运行时被替换,Jetty 不会删除超时 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com