我是一个在校学生,我想请个各位大侠,在我的项目里面,每次操作都要判断该用户是否有这项权限,我想到了两个方法
1、登录的时候把用户的权限全部放在session里面,后面的每次判断直接对session操作
2、每次操作都查询数据库,判断该用户是否有这样的操作权限。
问题是:是用session好呢?还是查询好;各自的优缺点是什么?该怎么取舍?

解决方案 »

  1.   

    尽量别与数据库交互,能避免则避免,
    再一个你说的应该是细粒度的权限控制,一般都是在session存放一个集合,即你所说第一种方案,比较合理,如果为 null,则让他登陆,如果不为null则让其执行
      

  2.   

    当然是放session了,效率在怎么低也比访问数据库强呀应该尽量避免频繁操作数据库
      

  3.   


    通常使用session因为如果权限分的很细,每一个操作(增,删,改,查)都需要权限判断的话,如果用查询不停的与数据库交互性能损耗太大。但是使用session存在一个问题,你是在用户登陆的时候查出他所拥有的权限放入session,如果用户登陆以后,管理员对他的权限进行了修改,那么会造成一个问题,用户session中所存储的权限与后来管理员修改的权限不同步。我原来用session做的权限一直没找到解决同步问题的好方法。望有高人指点一下
      

  4.   

    session中作,
    能和数据库少交互 就少交互
      

  5.   


    session是会占用服务器内存。但是和频繁的与数据库交互相比要好的多。
      

  6.   

    解决SESSION同步,我有一个想法不知道好不好。维护一个应用级变量,正常状态下为TRUE,管理员更新权限后,把状态置为FALSE,在判断用户权限的时候,先对这个变量做个判断,如果为FALSE,就将SESSION的权限信息重置,为TRUE时则进行正常的操作!
      

  7.   

    谢谢12楼的建议
    但是此方法一看就存在问题。
    一个系统会有多用户登录。权限也不同。
    如果管理员修改了用户A的权限。
    变量改为false;
    A暂时没有任何操作.而用户B进行了操作。由于变量为false。重新查询用户B的权限,把查询出B的权限重新放入session,由于B得权限没变空耗资源是先忽略不计,但是重置B的session后变量又改为了true.A再操作的话还是原始权限。。
      

  8.   

    用session吧。能不与DB交互。就尽量不与DB交互。因为那速度太慢。session相对占点空间。但是速度比DB快多了。现在的程序。都是先考虑速度的
      

  9.   

    还是放session 中吧。第一种方法数据库压力太大,正常情况下应该尽量减少没必要的对数据库的操作。但是第二也要考虑session 的一些同步、注消等问题。。
      

  10.   


    那么session在安全性上来说就不怎么样了吧
      

  11.   

    我感觉这个 也不用放在session 和 从数据库查询
    这个两个都 有弊端的 
    session 中 耗资源 还不能实时更新里面的数据这样多 浏览器的压力太大 要是一直从数据库里面查询的话 频繁连接数据 给系统造成的压力也是很大的。建议 你还是 配置一个拦截器专门拦截 jsp 或者 html 页面 
    然后把数据放在request 里面  发送到页面 
    这样 既省事 也 省资源request 发送到页面 也就销毁掉了  这样 也不存在这个隐患了
      

  12.   

    放session里,写一个过滤器,过滤每次的请求!如果过滤不通过,就打回去,不做数据操作响应,提示错误;如果过滤通过,就做相应的操作即可
      

  13.   

    把权限发送到页面?
    OMG,那我想成为超级管理员都可以了。个人觉得,放session和做缓存、序列化等都各有优缺点。
    没有一成不变的答案。如果放在session中,则要考虑用户数量所带来的内存开销,然后跟其他方式进行比较,看看哪种合适吧。
      

  14.   

    项目中尽可能少的使用session,因为它会一直占用内存直到进行销毁而且session是存在一定问题的。
    和对数据库频繁操作相比session好多了,但是我希望你尽可能使用request来替换session的操作。
      

  15.   


    你是不是还要点击一下 在一次想去后台查看能不能操作 这个 你用平时的 方法 就可以了 能操作 就 执行要操作的方法 不能操作 就直接拒绝
    这个最好 用ajax 实现
      

  16.   

    给用户分配一个角色role属性(如:管理员)。role中有各种各样的权限(如:添加用户权限),只要把权限与角色role关联,在每次用到权限的时候直接判断该用户role属性中有没有该权限,所以既不用放在session中也不需要每次都查数据库来得到权限。
    一点经验,不知道有没有说清楚。
      

  17.   

    用session比较好一点,用完后销毁就行了。
      

  18.   

    session比较好。数据查询在每一次权限跳转的时候都会进行一次数据库访问,会大量损耗服务器资源。
    而用session的话,是对一次查询出的数据与客户端预读且已加载完的定值进行比较。相对不是很损耗服务器资源。
      

  19.   


     敢问request里面的数据从何而来?
      

  20.   

    如果要求效率的话 session 放一个用户id就行了。   如果是本地 后台系统的话。 session 存储权限也不错的
      

  21.   


    不是什么高手,谈一下我的想法:
    在管理员更改权限时,可以将session会话中保存的权限一块修改。
      

  22.   

    请教哈,我也在做这个权限域的判断,也要判断某以用户,是否有增删改查功能, 你说的,拦截jsp或者html页面 然后数据放到request里面,能说清楚点吗?或者给点思路。或者给点代码,学习哈。感谢了
      

  23.   


    我吐血。。每个人的session是独立的啊。。
    管理员怎么修改,操作员的session..