session莫名丢失,会是啥原因啊,如何调试

lining_1977 2009-11-11 03:38:12
目前系统运行过程中,会莫名其妙的跑到登陆页面,每个jsp头都加了用户的session验证,而且都是在操作过程中丢失的,肯定不是过期引起的,会是啥原因的?没有测试出丢失的规律,是偶尔发生的,
...全文
568 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgret 2009-11-17
  • 打赏
  • 举报
回复
我也遇到过这种情况,莫名其妙的session值就变掉了,仔细查找原因发现好像在主页面如果用window.open的话sessionID一定会丢失。所以后来把所有的window.open都移交到iframe里面的页面去了。
ml_dark 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 javagril 的回复:]
学习,我还没遇到这种情况
[/Quote]
...禁用cookie怎么办?那session不是挂掉了................................................................
礼拜六 2009-11-16
  • 打赏
  • 举报
回复
真的没碰到过,关注!
goldeyehn 2009-11-16
  • 打赏
  • 举报
回复
很久没写代码了,只能给你思路。
确定其他操作没有修改session。
确定要找的session正确
确定需要session的页面能正确得到正确的session。

所谓丢了,就是以后都找不到。
回到登录页面后,你后退做其他操作是正常还不正常?
是都不正常还是有时候不正常。

先定位问题出现的地方吧。
闲人のMr丶Wu 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 javagril 的回复:]
学习,我还没遇到这种情况
[/Quote]
嗯,我也学习
timeriver_wang 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhuangwei517 的回复:]
如果不跨域,session在正常情况下丢失到是还没有遇到过。
要调试你可以写一个监听的类:
public class LoninListener implements HttpSessionBindingListener

{
public void valueBound(HttpSessionBindingEvent event)
{

        }
public void valueUnbound(HttpSessionBindingEvent event)
{
    记录相关信息
}
}

在登录方法里采用session.setAttribute("longin",new LoninListener());进行绑定。这样当login这个属性失效后就会调用LoninListener 中的valueUnbound方法。valueUnbound方法你可以根据自己想获取的信息进行实现
[/Quote]
这是个好方法
要不就用 Eclipse的dug
downice 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 javajc 的回复:]
22楼: 服了,那就把那些代码全删点,用一个filter过滤全搞定,基本丢失可能性下降80%吧

action 中你也过滤么?action分项目前台的action和后台添加数据的action你怎么处理session问题,说的真简单
[/Quote]

关ACTION什么事情,在filter里面重新确认下session嘛。。。。相当于继电器(模拟信号传输损耗)。
这个比率多少我不知道。。但是肯定有一定的作用。
teemai 2009-11-13
  • 打赏
  • 举报
回复
mark
wind_rosebush 2009-11-13
  • 打赏
  • 举报
回复
lz看看session是在哪丢失的,然后再分析分析代码找找原因,之前我也遇到过,后来找到那地方,只是重新拾下session
海川520 2009-11-13
  • 打赏
  • 举报
回复

22楼: 服了,那就把那些代码全删点,用一个filter过滤全搞定,基本丢失可能性下降80%吧

action 中你也过滤么?action分项目前台的action和后台添加数据的action你怎么处理session问题,说的真简单
fyofmee 2009-11-12
  • 打赏
  • 举报
回复
关注下
  • 打赏
  • 举报
回复
服了,那就把那些代码全删点,用一个filter过滤全搞定,基本丢失可能性下降80%吧
zl3450341 2009-11-12
  • 打赏
  • 举报
回复
既然不是时间问题
估计原因是
大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开
IE中的cookie数量限制(每个域20个cookie)可能导致session丢失
designedIt 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lining_1977 的回复:]
(HttpServletResponse)response).setHeader("P3P","CP=CAO PSA OUR"
这个我试试,不知道能不能解决,太难模拟了,不过我们用了好多的框架,iframe,说不定真是这个原因呢
服务器没事

[/Quote]

这个问题我曾与它搏斗了好多天。
就是:session没有过期,而是浏览器向服务器方传请求时,会丢失JSESSIONID的这个COOKIE。经过我的多方测试,我发现:当使用frameset 或 iframe 时,出现的可能性很高。
查了很多资料,微软的解决方案建是:setHeader("P3P","CP=CAO PSA OUR"),
但对我们的系统,没有用。
后来用户实在对我们这个问题很烦脑,最后不得不放弃session,全部采用URL重写。(以后的系统中,我们就少用了frameset 与 iframe了----若要用,应该使用URL重写。)
cangbai217 2009-11-12
  • 打赏
  • 举报
回复
关注
海川520 2009-11-12
  • 打赏
  • 举报
回复
恩,我也出现过,不过一直没有解决关注中。。。struts 2 ie7浏览器
bayougeng 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 benewu 的回复:]
是不是往session里面塞了很多对象导致出错?
用一些调式工具跟踪一下

或者干脆把session持久化到数据库,如果丢失了再去数据库找一遍。
[/Quote]

强!
李子做IT 2009-11-12
  • 打赏
  • 举报
回复
学习了.
benewu 2009-11-12
  • 打赏
  • 举报
回复
是不是往session里面塞了很多对象导致出错?
用一些调式工具跟踪一下

或者干脆把session持久化到数据库,如果丢失了再去数据库找一遍。
zhuangwei517 2009-11-12
  • 打赏
  • 举报
回复
如果不跨域,session在正常情况下丢失到是还没有遇到过。
要调试你可以写一个监听的类:
public class LoninListener implements HttpSessionBindingListener

{
public void valueBound(HttpSessionBindingEvent event)
{

}
public void valueUnbound(HttpSessionBindingEvent event)
{
记录相关信息
}
}

在登录方法里采用session.setAttribute("longin",new LoninListener());进行绑定。这样当login这个属性失效后就会调用LoninListener 中的valueUnbound方法。valueUnbound方法你可以根据自己想获取的信息进行实现
加载更多回复(12)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧