gpt4 book ai didi

java - Java Servlet 3.0 中的 session 在每次请求时都会更改

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

我们使用 geronimo-servlet 3.0Tomcat 8 来运行 servlet,该 servlet 将使用如下 session

@Service
public class SessionServiceImpl implements SessionService
{
@Autowired(required = false)
private HttpServletRequest request;
private HttpSession session = null;

@Override
public void setUser(User user)
{
session = request.getSession();
if (session != null)
{
session.setAttribute(SessionAttribute.user.name(), user);
}
}

@Override
public void setData(String data)
{
session = request.getSession();
if (session != null)
{
session.setAttribute(SessionAttribute.data.name(), data);
}
}

@Override
public HttpSession getSession()
{
session = request.getSession();
session.setAttribute("TimeoutBased", System.currentTimeMillis());
return session;
}
}

在其他服务中,例如AuthService,调用sessionService如下

public class AuthServiceImpl extends CustomizedServlet implements AuthService
{
@Autowired
private SessionService sessionService;

@Override
public BaseModel login(BaseModel user) {
...
sessionService.setUser(userEntity);
...
sessionService.setData(data);
}
}

CustomizedServlet 是 GWT 的 com.google.gwt.user.server.rpc.RemoteServiceServlet。登录方法为Web客户端登录。这一切都正常工作。

但是,有时,由于未知的原因,每次从 Google Chrome 打开的网络客户端发送请求时, session 都会发生变化。

此外,在 Debug模式下,我看到 session ID 在一个请求中不断变化,如下图所示。

enter image description here

enter image description here

enter image description here

第一个请求响应如下

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=53144E2C46D6DF7C5986D56F01A6961E; Path=/ABC/; HttpOnly
Content-Encoding: gzip
Content-Disposition: attachment
Content-Type: application/json;charset=utf-8
Content-Length: 1909
Date: Tue, 07 Mar 2017 01:42:13 GMT

comet的另一个servlet是第二个请求,请求中没有jsessionid

GET /ABC/CometServlet?qndOeINh HTTP/1.1
Host: web.test.abc.com:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Content-Type: application/x-javascript;
Accept: */*
Referer: http://web.test.abc.com:8080/ABC/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-TW,zh;q=0.8,ja;q=0.6
Cookie: username=%7B%22state%22%3A%22s%3Aadmin%22%7D;

毕竟,如果我清除 Chrome 的站点数据,它就可以正常工作。目前还没有弄清楚造成这种情况的根本原因。有没有人有一些经验或任何想法?

最佳答案

不知道这是否有帮助,但我也面临着 session 问题。 JSESSIONID 在每次请求时都会更改其值。这只是由 JSF 标记引起的:

<h:link outcome="${loguinBean.logOut()}" value="LogOut" />

由于某种原因,当我成功登录并刷新页面时, session 会不断丢失。当我删除该标签并将其替换为 <h:commandLink> 后里面 <h:form> ,一切正常。

关于java - Java Servlet 3.0 中的 session 在每次请求时都会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42642602/

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