不同用户之间session内容互相冲突

现象是:  
  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是不一样的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值