现象是:
A用户在1.jsp页面中访问数据库,返回的是一个对象,用下面这种办法:
session.setAttribute("obj",myobj);
把这个对象放到session中。然后在2.jsp中用
MyObjects obj=(MyObjects)session.getAttribute("obj");
方法得到这个对象,再从中取值。
B用户也作同样的操作。
如果A先,B后,那么A之前放到session中的obj就会被B的obj替换掉。
解决方法:
首先你的储存个人信息的类的属性不可以设置为static,
检查是否存在这个问题,如果这里没有问题。
那么因为你自己写的类是线程不安全的,你如果在这个类中对session进行操作,当
多个用户同时访问是,可能出现上边的问题。
解决办法,在你的类之前,加上 synchronized 关键字,进行同步。确保一次只有一个用户执行里边的方法。当然,也可以只对某几个方法加上这个关键字。
会话管理一般是由servlet引擎所提供的,用来跟踪所有的客户端-服务器连接,为每一个连接分配唯一的Id,在建立连接时分配给客户端,并被传送给后续响应中的客户端.(使用ctrl+N新打开的窗口仍然属于后续连接)
会话管理不仅仅是识别连接,每个会话是一个java对象(HttpSession类),所以通过ip来识别说法是不对的.
将sessionId分配给客户端,不同的服务器有不同的方法,常见的技术有如下三种:
1 ) URL重写
session id的名称-值添加到URL(名称必须是jsessionid)
2 ) 通过cookie
cookie的名称必须是JSESSIONID,需要浏览器支持cookie
3 ) 加密套接字协议层(SSL)
Http协议的SSL已经建立在会话管理中
使用不同的新开窗口分别登录是不同的连接,session也是不一样的.
我们写一个测试页面来检验一下sessionId的值和cookie中的值:
页面的代码如下(testSession.jsp):
<!---->
<!---->
<1>在weblogic中测试
打开一开窗口,页面显示为:
Cookie in the request:
JSESSIONID : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544
Request session Id : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544!1095064343206
使用ctrl+N打开一个新窗口的页面显示为:
Cookie in the request:
JSESSIONID : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544
Request session Id : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544!1095064343206
重新开一个窗口,页面显示为:
Cookie in the request:
JSESSIONID : BFbyitXTY2Kt72b2vn2uvrzHsGjt98larvxKSz4fcZngOsIVsGSI!-2110814544
Request session Id : BFbyitXTY2Kt72b2vn2uvrzHsGjt98larvxKSz4fcZngOsIVsGSI!-2110814544!1095064562753
我们可以看到对于每个新打开的窗口其session是不一样的
<2>在oracle IAS中测试
新开窗口,页面显示为:
Cookie in the request:
JSESSIONID : c3df128b9f7c4a60a75a88c3cb3cb5e2.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : c3df128b9f7c4a60a75a88c3cb3cb5e2
使用ctrl+N打开新窗口的页面显示为:
Cookie in the request:
JSESSIONID : c3df128b9f7c4a60a75a88c3cb3cb5e2.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : c3df128b9f7c4a60a75a88c3cb3cb5e2
重新开一个窗口,页面显示为:
Cookie in the request:
JSESSIONID : 556dca64e085417bad8f9d88be0401ee.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : 556dca64e085417bad8f9d88be0401ee
同样我们可以看到每个新开窗口其session是不一样的
分享到:
相关推荐
在多用户环境下,若Session ID生成策略不够安全,可能导致Session冲突,即不同用户间的数据互相混淆。解决方法是使用更安全的Session ID生成机制,如结合用户IP和时间戳,确保每个Session ID的独特性。同时,注意...
注意,`$mysessionname`不能是Session的内置变量,应在Session开始之前初始化,并且不应使用Cookie来存储,以免不同Session之间发生冲突。可以考虑使用隐藏表单字段来传递这个值。 在高并发环境下,确保Session的...
WebLogic Server中,两个不同域的应用之间可能存在Session冲突,这通常由于Cookie的覆盖机制所引起。本文将详细解析这个问题的现象、原因以及提供解决方案。 **一、现象分析** 当用户在一个域(例如,域A的9000端口...
解决死锁问题的关键就是让不同的 Session 加锁有次序。 MySQL 中有三种锁的级别:页级、表级、行级。表级锁的开销小、加锁快,锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁的开销大、加锁慢,锁定粒度...
锁机制用于管理并发事务之间的数据访问,以避免数据冲突。 ##### 锁类型 Oracle中的锁主要分为两种类型: - **排他锁(EXCLUSIVE LOCK)**:一次只能由一个事务持有,其他任何事务都无法再获取该锁。 - **共享锁...
4. **测试和调试**:全局变量可能使测试变得更复杂,因为它们的值可能在不同测试之间互相影响。同样,调试时,追踪全局变量的来源和变化也更为困难。 5. **最佳实践**:在Sinatra应用中,推荐使用局部变量、实例...
【Tomcat集群配置】 在高流量的Web应用中,单个服务器可能无法处理所有请求,这时就需要使用集群来分散负载,提高系统可用性和容错性。...在整个过程中,需要特别关注session管理、负载均衡策略以及服务器之间的通信。
2. **账户隔离**:为了保证不同账号的安全性,浏览器实例之间需要有严格的隔离措施,确保Cookie、Session等信息不会互相干扰。 3. **界面定制**:可能包含自定义快捷键、布局以及用户界面元素,以满足不同用户的...
Cookie和Session都是用于跟踪用户状态的技术,但它们的工作原理不同。Cookie存储在客户端,而Session存储在服务器端。Cookie可能会受到用户禁用的影响,而Session则不会。然而,Session可能因服务器重启或超时而丢失...
死锁的关键在于:不同会话(Session)加锁的顺序不一致。 在MySQL中,InnoDB存储引擎是最常用的支持事务处理的引擎之一。InnoDB采用的是行级锁机制,并且使用了多种锁定技术,如Next-Key Locks、Gap Locks和Record ...
LLC负责处理不同网络层之间的通信,而MAC则管理同一物理网络上的设备如何共享传输介质,防止数据冲突。该层通过帧(frame)进行数据传输,并提供错误检测和纠正功能。 3. **网络层(Network Layer)** 网络层的...
- **隔离性(Isolation)**: 并发执行的事务之间是隔离的,不会互相干扰。 - **持久性(Durability)**: 一旦事务提交,其对数据库的影响将是永久性的。 **3. Hibernate中的事务控制** - **SessionFactory与Session...
在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。死锁不仅影响数据库性能,还会影响应用程序的可用性和用户...
这个模型为不同类型的计算机网络提供了通用的框架,使得不同制造商的硬件和软件能够互相通信。下面我们将深入探讨OSI模型的每一层及其功能。 1. **物理层(Physical Layer)** 这是OSI模型的最底层,负责传输原始...
这使得分布在不同地点的计算机可以互相通信和交换数据。 8. 段落选择:在大多数文本编辑器或处理软件中,三击段落可以选择整个段落,选项正确。 9. 逻辑表达式:在逻辑运算中,NOT 3+5>8的结果为True,因为3+5等于...
Zigbee协议栈是无线通信领域中的一个重要组成部分,主要用于物联网(IoT)设备之间的低功耗、短距离通信。Zigbee技术基于IEEE 802.15.4标准,设计目标是创建一个简单、高效且可靠的网络,使得传感器和控制设备能够互相...
- **死锁**:死锁是一种更严重的情况,其中两个或更多的会话互相等待对方释放锁,从而形成一个无法解决的循环。Oracle数据库能够检测和解决死锁,但这种情况应尽量避免,因为它们会导致性能下降和系统不稳定。常见的...
可以考虑使用`ALTER TABLE`语句来修改约束定义或者直接删除导致冲突的记录。 **ORA-00017: 请求会话以设置跟踪事件** - **描述**: 当需要对某个会话进行跟踪时,可能会遇到此错误。通常发生在管理员试图启用跟踪...