浏览 1721 次
锁定老帖子 主题:session错误使用的问题(二)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-08
最后修改:2011-11-08
最近跟session较上了,前一篇帖子内容少,但提到了第二种情况,很多人在项目中都出现了,来自于真实情景。http://www.iteye.com/topic/1117443
现在在写一个关于session在实际开发中的问题 情景如下:在代码发现需要取用户数据,这部分登录数据放到session里面,但是代码的逻辑却出现问题, 在代码中 HttpSession session = getRequest().getSession(false); RbacUser user = (RbacUser) session.getAttribute(Constants.User.LOGIN_USER); if(user!=null){ //取出user的id } //使用到对id进行一些列操作 代码有什么问题? 1.sessin不一定存在,使用前没有进行判断,自己测试时候容易忽略,作为登录用户来测试,一切完好。 2.根据判断session里面有信息取出id,但是如果没有user这个对象呢?这个时候已经出错了,为什么这个逻辑不处理?然后你定义一个全局页面,返回到要处理这个全局页 这个是常见问题,如果逻辑完整,当然没有问题,只是点逻辑上不是很好罢了!不是想探讨的 早期如果规划好路径,进行相应路径调用这个方法时候,已经aop拦截保证了相关权限用户才能进行调用,那么为什么要写这些逻辑对代码进行污染?进行编码的程序员能很爽的使用session,也知道这个user对象必定存在,不需要进行那么判断,不需要在里面决定同一返回哪些页面,这个代码逻辑也清晰,一些冗余的代码不是也抽离出来了吗? session这样处理感觉没问题,可存在疑惑的是项目中有很多判断,比如页面传递过来的产品id取产品数据,那么这个时候代码习惯性加上了if判断,但是产品id不存在又没有操作,这样子的逻辑又改怎么办?是逻辑不完整,加上else然后给个页面?还是怎么 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-08
悲剧了 写道 最近跟session较上了,前一篇帖子内容少,但很多人在项目中都出现了提到了第二种情况,来自于真实情景。http://www.iteye.com/topic/1117443
现在在写一个关于session在实际开发中的问题 情景如下:在代码发现需要取用户数据,这部分登录数据放到session里面,但是代码的逻辑却出现问题, 在代码中 HttpSession session = getRequest().getSession(false); RbacUser user = (RbacUser) session.getAttribute(Constants.User.LOGIN_USER); if(user!=null){ //取出user的id } //使用到对id进行一些列操作 代码有什么问题? 1.sessin不一定存在,使用前没有进行判断,自己测试时候容易忽略,作为登录用户来测试,一切完好。 2.根据判断session里面有信息取出id,但是如果没有user这个对象呢?这个时候已经出错了,为什么这个逻辑不处理?然后你定义一个全局页面,返回到要处理这个全局页 这个是常见问题,如果逻辑完整,当然没有问题,只是点逻辑上不是很好罢了!不是想说的重点 早期如果规划好路径,进行相应路径调用这个方法时候,已经aop拦截保证了相关权限用户才能进行调用,那么为什么要写这些逻辑对代码进行污染?进行编码的程序员能很爽的使用session,也知道这个user对象必定存在,不需要进行那么判断,不需要在里面决定同一返回哪些页面,这个代码逻辑也清晰,一些冗余的代码不是也抽离出来了吗? |
|
返回顶楼 | |
发表时间:2011-11-08
我一般的做法是,业务逻辑不直接从HTTP SESSION中取值,而是使用一个带有ThreadLocal的类,设置一个过滤器,每一次请求都将session中的值设置到那个ThreadLocal中
|
|
返回顶楼 | |
发表时间:2011-11-08
这个是代码写的有问题吧...
还要看架构规定 有些架构里面 直接保证 登录用户对象 百分百存在 |
|
返回顶楼 | |