Package railo.runtime.type.scope

Source Code of railo.runtime.type.scope.JSession

package railo.runtime.type.scope;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import railo.runtime.PageContext;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.listener.ApplicationContext;
import railo.runtime.type.Collection;
import railo.runtime.type.scope.storage.MemoryScope;
import railo.runtime.type.util.KeyConstants;

/**
*
*/
public final class JSession extends ScopeSupport implements Session,HttpSessionBindingListener,MemoryScope {
   
  public static final Collection.Key SESSION_ID = KeyConstants._sessionid;
  private static Set<Collection.Key> FIX_KEYS=new HashSet<Collection.Key>();
  static {
    FIX_KEYS.add(KeyConstants._sessionid);
    FIX_KEYS.add(KeyConstants._urltoken);
  }

 
  private String name;
    private long timespan=-1;
    private HttpSession httpSession;
    private long lastAccess;
  private long created;

    /**
     * constructor of the class
     */
    public JSession() {
        super(true,"session",SCOPE_SESSION);
        setDisplayName("Scope Session (Type J2ee)");
        this.created=System.currentTimeMillis();
    }

    @Override
  public void touchBeforeRequest(PageContext pc) {
   
      ApplicationContext appContext = pc.getApplicationContext();
      timespan=appContext.getSessionTimeout().getMillis();
      this.name=appContext.getName();
      HttpSession hs = pc.getSession();
      String id="";
      try{
        if(hs!=null)this.httpSession=hs;
        if(httpSession!=null) {
          id = httpSession.getId();
          if(httpSession.getMaxInactiveInterval()<(timespan/1000))
            httpSession.setMaxInactiveInterval((int)(timespan/1000));
        }
       
    }
      catch(Throwable t) {
       
      }
        

      lastAccess=System.currentTimeMillis();
        setEL(KeyConstants._sessionid,id);
        setEL(KeyConstants._urltoken,"CFID="+pc.getCFID()+"&CFTOKEN="+pc.getCFToken()+"&jsessionid="+id);
  }

  public void touchAfterRequest(PageContext pc) {
   
  }
  @Override
  public void release() {
    release(ThreadLocalPageContext.get());
  }
 
  @Override
  public void release(PageContext pc) {
      if(httpSession!=null){
        try {
          Object key;
          Enumeration e = httpSession.getAttributeNames();
          while(e.hasMoreElements()) {
            // TODO set inative time new
            key=e.nextElement();
            if(key.equals(name))httpSession.removeAttribute(name);
          }
          name=null;
          timespan=-1;
          httpSession=null;
          lastAccess=-1;
        }
        catch(Throwable t) {}
      }
        super.release(pc);
    }

    @Override
    public long getLastAccess() {
        return lastAccess;
    }

    @Override
    public long getTimeSpan() {
        return timespan;
    }

    @Override
    public boolean isExpired() {
        return (getLastAccess()+getTimeSpan())<System.currentTimeMillis();
    }

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
       
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        clear();
    }
 
    @Override
    public void touch() {
    lastAccess=System.currentTimeMillis();
  }

  @Override
  public long getCreated() {
    return created;
  }
 
  public Collection.Key[] pureKeys() {
    List<Collection.Key> keys=new ArrayList<Collection.Key>();
    Iterator<Key> it = keyIterator();
    Collection.Key key;
    while(it.hasNext()){
      key=it.next();
      if(!FIX_KEYS.contains(key))keys.add(key);
    }
    return keys.toArray(new Collection.Key[keys.size()]);
  }

  @Override
  public void resetEnv(PageContext pc) {
    created=System.currentTimeMillis();
    lastAccess=System.currentTimeMillis();
    touchBeforeRequest(pc);
  }
}
TOP

Related Classes of railo.runtime.type.scope.JSession

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.