现在是有这样的一个需求根据用户身份,一级用户的session有效期为10分钟,如果10分钟之间不进行任何操作的话,那么session就失效。非一级用户则的session则是永久有效。这个问题该如何解决???

解决方案 »

  1.   

    session.setMaxInactiveInterval(“有效时间”);根据用户级别分别设置有效时间,单位是秒
      

  2.   

    设置不了,session的过期时间不支持动态设置
      

  3.   


    支持这种方式 我用过 确定session是可以自定义时间的
      

  4.   


    你这个说的是在web.xml设置死的。按照楼主的需求,分别设置session周期肯定可以做到。
    就在用户登陆成功后,根据角色分配每个session的时间,然后再把用户信息set到session中:
    if(登陆ok){
       HttpSession session = request.getSession();
       session.setMaxInactiveInterval(10*60);  // 10分钟  如果永不过期,那就设置为-1   session.setAttribute("user",user);
    }
      

  5.   

    判断一级用户登录的话, 页面可以用window.setInterval(fn , 60000)每十分钟调用 fn。  fn 可以是ajax的一个调用servlet的方法,每十分钟就访问下服务器,就可以保证不失效的session
    非一级用户页面不调用window.setInterval(fn , 60000).
      

  6.   

    我用listener监听做的一个,可以改一下:
    public class OnlineUserListener implements HttpSessionListener {
    protected final Log log = LogFactory.getLog(getClass());
    public void sessionCreated(HttpSessionEvent event) {
    } public void sessionDestroyed(HttpSessionEvent event) {
    HttpSession session = event.getSession();
    ServletContext application = session.getServletContext();
                    // 取得登录的用户信息
    SysUser user = (SysUser) session.getAttribute("sysUser");
    //判断用户角色是否为管理员
    if(user.getRole().getRoleId()!=1){
    session.invalidate();
    log.info(user.getRealName() + "超时退出。");
    }
    }}
      

  7.   

    我昨天也想到这个办法了,但你这个貌似只是在session失效时的一个管理,无法做到真正去控制session的管理时间。如果是管理者,失效的时候再进行session注册。但是,如果session里面的东西很多,不光是用户名的时候,就不好用了。还需要把所有的session里的东西再重新注册,很有可能有地方遗漏的
      

  8.   

    就在用户登陆成功后,根据角色分配每个session的时间,然后再把用户信息set到session中: 
    if(登陆ok){ 
       HttpSession session = request.getSession(); 
       session.setMaxInactiveInterval(10*60);  // 10分钟  如果永不过期,那就设置为-1    session.setAttribute("user",user); 

    这个是正解。
      

  9.   

    <session-config>
         <session-timeout>480</session-timeout>
    </session-config>
    在web.xml里配置这个480你自己选择
      

  10.   

    判断后台登录的时候,针对登录用户加一个session实效时间的定义就好了。