日期:2014-05-19  浏览次数:20754 次

往session中保存一个对象,保存的只是一个引用还是整个对象的内容?
代码如下:(Struts2的Action类,用来处理用户登录信息)
public class LoginAction
{
  public String execute()
  {
  if(登录成功)
  {
  User user = new User(); //User为自定义的一个用户类
  ... ...
  //给该user赋一些值
  ... ...
  ServletActionContext.getRequest().getSession(true).setAttribute("user",user);
  }
  }
}
session中保存的是user的一个引用,还是整个user信息?
如果只是“一个引用”的 ,那么我这个user是定义在一个方法内,它的有效范围只限于这个方法。因此出了这个方法我再对它进行防问就是不安全了,是这样吗?


------解决方案--------------------
刚才看一下这个,http://hanolex.org/archives/249.html
说的不错!
------解决方案--------------------
首先user是一个对象,也就是引用类型,凡是对引用类型的保存,都是copy一份它本身的引用。保存到Session中自然也不例外的是保存引用.至于你提到的安全性,Session本身就是在服务器上开辟一个内存,既然数据是保存在服务器上的,所以这样的访问是安全的。
(后话)当然,如果你要让变量保存user里面的数据也可以让user去实现clone这个接口,然后去调用user.clone()把user对象里的数据保存一份到user类的另一个对象userb中,这时你对userb里面数据的任何操作就都不会影响到user了.