相关疑难解决方法(0)

HttpSession线程是否安全,是否设置/获取属性线程安全操作?

此外,正在设置的对象是否必须是线程安全的,以保证我们知道会话中存储的对象的状态是什么.

此外,我正在网上阅读一些建议使用:

synchronized(session) {
  session.setAttribute("abc", "abc");
}
Run Code Online (Sandbox Code Playgroud)

这是一个有效的建议吗?

java session synchronized thread-safety

53
推荐指数
3
解决办法
4万
查看次数

为什么getSession()在短时间内远离后续请求中返回相同的会话?

我发送一个$.getJSON(HTTP GET)请求两次(使用不同的数据),一个接一个(假设我们有request1和request2).我可以在FF和Chrome的开发者工具中看到我有相同的cookie:JSESSIONID=FD0D502635EEB67E3D36203E26CBB59A标题字段.

在服务器端,我尝试获取会话:

HttpSession session = request.getSession();
boolean isSessionNew = session.isNew();
String sessionId = session.getId();
String cookieFromRequestHeader = request.getHeader("cookie");
Run Code Online (Sandbox Code Playgroud)

如果我为两个请求打印这些变量,请求1
:

isSessionNew:true
cookieFromRequestHeader:JSESSIONID = FD0D502635EEB67E3D36203E26CBB59A
session.getId():9212B14094AB92D0F7F10EE21F593E52

请求2:

isSessionNew:true
cookieFromRequestHeader:JSESSIONID = FD0D502635EEB67E3D36203E26CBB59A
session.getId():E8734E413FA3D3FEBD4E38A7BF27BA58

如您所见,服务器在a上为request2清楚地创建了一个新会话request.getSession().但为什么会这样呢?它理论上应该是同步的,并为您提供与第一个请求(首先达到此代码)创建的会话相同的会话.现在,为了确保会话创建已同步,我执行了以下操作:

@Autowired
private ServletContext servletContext;
...
synchronized (servletContext) {
    HttpSession session = request.getSession();
    boolean isSessionNew = session.isNew();
    String sessionId = session.getId();
    String cookieFromRequestHeader = request.getHeader("cookie");
}
Run Code Online (Sandbox Code Playgroud)

我得到了同样的结果.

如果我再次发送相同的请求(比如request1'和request2'),我得到,
request1':

isSessionNew:false
cookieFromRequestHeader:JSESSIONID = E8734E413FA3D3FEBD4E38A7BF27BA58 session.getId():E8734E413FA3D3FEBD4E38A7BF27BA58

请求2' :

isSessionNew:false
cookieFromRequestHeader:JSESSIONID = E8734E413FA3D3FEBD4E38A7BF27BA58
session.getId():E8734E413FA3D3FEBD4E38A7BF27BA58 …

java jquery spring http-get httpsession

14
推荐指数
1
解决办法
3万
查看次数

如何从JSESSIONID加载Java HttpSession?

我想HttpSession通过JSESSIONID 获取Java .可能吗?如果有,怎么样?

java servlets httpsession

13
推荐指数
1
解决办法
3万
查看次数

Spring的WebUtils.getSessionMutex(javax.servlet.http.HttpSession)和HttpSessionMutexListener仍然相关

我想知道Spring框架的HttpSessionMutexListener监听器是否仍然与今天的应用服务器/ Web容器(比如2.5 + servlet规范服务器,如Tomcat 6或Tomcat 7)相关,用于在集群环境中锁定会话对象(即在不同的JVM之间) ,或者他们只解决2.3(或以前)servlet规范容器的集群环境中的并发问题,现在它是不必要的?

concurrency spring servlets

3
推荐指数
1
解决办法
3343
查看次数