session问题,修改时间问题。。

pxjjava 2009-06-09 01:12:37
下面是一部分代码:
user=userLoginDao.Login(uName, uPassword);//查询此用户是否存在
HttpSession sess=request.getSession();
if(user !=null){

sess.setAttribute("user", user);//如果存在该用户就把用户整个对象保存
Users uu=(Users)sess.getAttribute("user");
1行 System.out.println(uu.getLastlogdate()+"session11111");
request.getSession().setAttribute("associlist", associlist);//保存未读消息数
//修改用户上次登陆时间
Date date=new Date();//实例当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式当前时间
sdf.format(date);
Users us=user;//对象赋值
2行 System.out.println(sdf.format(date)+"==");
3行 us.setLastlogdate(DateUtil.parseDate(sdf.format(date)));//时间转化 保存到对象
4行 System.out.println(us.getLastlogdate()+"=---=");
Users u=(Users)sess.getAttribute("user");
5行 System.out.println(u.getLastlogdate()+"session");
userLoginDao.updateLastLog(us);//把当前时间做为上次登陆时间
return mapping.findForward("index");
}

工程是基于struts1,hibernate,spring--ssh框架的
主要目得是用户登录后,查出用户相关信息,然后获得当前时间把数据库里的上次登录时间改为当前时间。
但是页面还是需要显示的是上次登录时间;
1行是放进session里后的时间。打印出来是对的。
2行是当前时间。
4行是修改后的时间。
5行是一开始放进session里的时间。
下面是控制台打印出来的。
2009-06-09 10:07:00.0session11111
2009-06-09 10:39:48==
Tue Jun 09 10:39:48 CST 2009=---=
Tue Jun 09 10:39:48 CST 2009session


当3行注释后5行还是数据库查出来的,
当3行注释去掉后5行就变成了当前时间了。
要怎么样才能让3行set后session里的user对象里的时间不会改掉。

如果5行打印出来的是Tue Jun 09 10:07:00 CST 2009session就说明问题解决。
...全文
168 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jefyjiang 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kbyst 的回复:]
引用 13 楼 pxjjava 的回复:
就是我没有重新set进去session里面的时间最后还是改了啊。。。我就是要解决这个问题啊。。。。。





Users us=user;//对象赋值

是上面这句把user=userLoginDao.Login(uName, uPassword)取到的值给改变了

是引用传递不是值传递


[/Quote]
session是存在于服务器端的东西,你sess.setAttribute("user", user);//如果存在该用户就把用户整个对象保存 这句话只是把user这个引用传到session中去了,而并不是把user这个对象本身保存在session,那么你对users对象的所有的更改,就如同你直接更改session中的那个引用指向的对象一样,在你的代码中,似乎所有的User类型的引用都是指向你第一条语句生成的user对象,这样就造成了你现在的结果,你试着把Users us=user;//对象赋值这一句改一下,改成Users us=new Users(user.getId());//假设id是你users表的主键 看行不行。
不知道我说的清楚不。
kbyst 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pxjjava 的回复:]
就是我没有重新set进去session里面的时间最后还是改了啊。。。我就是要解决这个问题啊。。。。。

[/Quote]



Users us=user;//对象赋值

是上面这句把user=userLoginDao.Login(uName, uPassword)取到的值给改变了

是引用传递不是值传递

jefyjiang 2009-06-10
  • 打赏
  • 举报
回复
看了半天才近似看懂,似乎是hibernate延迟加载的问题,吃完饭回来后给答案
pxjjava 2009-06-10
  • 打赏
  • 举报
回复
就是我没有重新set进去session里面的时间最后还是改了啊。。。我就是要解决这个问题啊。。。。。
kbyst 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pxjjava 的回复:]
复制错了.这句上面一句..
sess.setAttribute("user", user);//如果存在该用户就把用户整个对象保存
是这句.

[/Quote]

楼主 你给出的代码 只有这一句初始设置的session.setAttribute

改变之后你重新setAttribute了么 好像没有吧 至少给出的代码里没有

楼主再看看
pxjjava 2009-06-10
  • 打赏
  • 举报
回复
复制错了.这句上面一句..
sess.setAttribute("user", user);//如果存在该用户就把用户整个对象保存
是这句.
kbyst 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pxjjava 的回复:]
4行 System.out.println(us.getLastlogdate()+"=---=");
Users u=(Users)sess.getAttribute("user");
5行 System.out.println(u.getLastlogdate()+"session");
中间的Users u=(Users)sess.getAttribute("user"); 是我打印测试用的...
Users uu=(Users)sess.getAttribute("user"); 这句才是我把users放进session里的代码..
来看的先看看清楚....
[/Quote]

Users uu=(Users)sess.getAttribute("user"); 这句才是我把users放进session里的代码..

兄弟,你这是放session么?
pxjjava 2009-06-09
  • 打赏
  • 举报
回复
4行 System.out.println(us.getLastlogdate()+"=---=");
Users u=(Users)sess.getAttribute("user");
5行 System.out.println(u.getLastlogdate()+"session");
中间的Users u=(Users)sess.getAttribute("user"); 是我打印测试用的...
Users uu=(Users)sess.getAttribute("user"); 这句才是我把users放进session里的代码..
来看的先看看清楚....
Dream_gril 2009-06-09
  • 打赏
  • 举报
回复
up
robyjeffding 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuyang7654321 的回复:]
引用 3 楼 kbyst 的回复:
sers us=user;//对象赋值

us.setLastlogdate(DateUtil.parseDate(sdf.format(date)));

Users u=(Users)sess.getAttribute("user");

us根本就没往session里放啊
怎么会有 啊

改时间后再set一下



对啊 你设置了新值 还没有保存呢 !!
[/Quote]
正解!
ty_seven 2009-06-09
  • 打赏
  • 举报
回复
Users us=user;//对象赋值
改为User us = uu;
zhuyang7654321 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kbyst 的回复:]
sers us=user;//对象赋值

us.setLastlogdate(DateUtil.parseDate(sdf.format(date)));

Users u=(Users)sess.getAttribute("user");

us根本就没往session里放啊
怎么会有 啊

改时间后再set一下
[/Quote]

对啊 你设置了新值 还没有保存呢 !!
withwind_ 2009-06-09
  • 打赏
  • 举报
回复
web.xml文件中设置时间 ,单位分钟

<session-config>
<session-timeout>1000</session-timeout>
</session-config>

session的方法单位秒

session.setMaxInactiveInterval()
kbyst 2009-06-09
  • 打赏
  • 举报
回复
sers us=user;//对象赋值

us.setLastlogdate(DateUtil.parseDate(sdf.format(date)));

Users u=(Users)sess.getAttribute("user");

us根本就没往session里放啊
怎么会有 啊

改时间后再set一下
yyandlh 2009-06-09
  • 打赏
  • 举报
回复
学习下~
x114944880 2009-06-09
  • 打赏
  • 举报
回复
明白LZ想要读取上次登录时间--有想把上次登录时间改变本次登录时间(变为下次登录的上次登录时间)
---定义一个String 来放上次登录时间,再改变上次登录时间
不要想的那么麻烦

LZ还想说在页面上用${user.lastLoginTime}来显示登录时间,
解决方法:在User里再定义一个字符串lastLoginTimeTmp(有get、set)来解决
备注:不是bean里的字段必须是和数据表里的一致--我们想定义多少就定义多少,数据表用多少只是在hmb配置文件力配置的

81,116

社区成员

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

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