往session中保存一个对象,保存的只是一个引用还是整个对象的内容?

lbllbl 2012-04-14 10:50:22
代码如下:(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是定义在一个方法内,它的有效范围只限于这个方法。因此出了这个方法我再对它进行防问就是不安全了,是这样吗?
...全文
926 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
当然是引用噜。。
dracularking 2012-04-14
  • 打赏
  • 举报
回复
保存的應該是引用,但你可以通過session輕易訪問到user所有信息
方法外安全性沒啥變化
一樣能訪問到,因為引用被傳遞了
呆呆天河 2012-04-14
  • 打赏
  • 举报
回复
你把user放到session相当于是拷贝了一个user到session里, 这个时候你就算改变了user的值,session里的user还是你存进去的时候的值,而session的生命周期是整个web交互,所以就算你这个方法执行完了,只要没有关闭这个web应用,你同样可以使用session来得到你刚刚存进session的user

而且,java里貌似没有传引用这一说法。
詹志彬_ANTA 2012-04-14
  • 打赏
  • 举报
回复
首先user是一个对象,也就是引用类型,凡是对引用类型的保存,都是copy一份它本身的引用。保存到Session中自然也不例外的是保存引用.至于你提到的安全性,Session本身就是在服务器上开辟一个内存,既然数据是保存在服务器上的,所以这样的访问是安全的。
(后话)当然,如果你要让变量保存user里面的数据也可以让user去实现clone这个接口,然后去调用user.clone()把user对象里的数据保存一份到user类的另一个对象userb中,这时你对userb里面数据的任何操作就都不会影响到user了.
昨日凡阳 2012-04-14
  • 打赏
  • 举报
回复
准确的说,要看你session中放什么类型的数值。放String的话,是不会改变的,因为是final的。放其他的,比如Object、List、Map等,则会改变,因为是同一个引用。
yizhizouxiaqu 2012-04-14
  • 打赏
  • 举报
回复
刚才看一下这个,http://hanolex.org/archives/249.html
说的不错!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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