sessionmodule.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 666 行 · 第 1/2 页

JAVA
666
字号
  }  /**   * Sets the session cookie parameters   */  public Value session_set_cookie_params(Env env,                                         long lifetime,                                         @Optional Value path,                                         @Optional Value domain,                                         @Optional Value secure)  {    env.setIni("session.cookie_lifetime", String.valueOf(lifetime));    if (path.isset())      env.setIni("session.cookie_path", path.toString());    if (domain.isset())      env.setIni("session.cookie_domain", domain.toString());    if (secure.isset())      env.setIni("session.cookie_secure", secure.toBoolean() ? "1" : "0");    return NullValue.NULL;  }  /**   * Sets the session save handler   */  public boolean session_set_save_handler(Env env,                                          Callback open,                                          Callback close,                                          Callback read,                                          Callback write,                                          Callback directory,                                          Callback gc)  {    SessionCallback cb      = new SessionCallback(open, close, read, write, directory, gc);    env.setSessionCallback(cb);    return true;  }  /**   * Start the session   */  public static boolean session_start(Env env)  {    if (env.getSession() != null) {      env.notice(L.l("session has already been started"));      return true;    }    SessionCallback callback = env.getSessionCallback();    Value sessionIdValue = (Value) env.getSpecialValue("caucho.session_id");    String sessionId = null;    HttpServletResponse response = env.getResponse();    env.removeConstant("SID");    String cookieName = env.getIni("session.name").toString();    boolean generateCookie = true;    boolean create = false;    if (callback != null) {      String savePath = env.getIni("session.save_path").toString();      if (savePath == null || "".equals(savePath))        callback.open(env, env.getWorkDir().getPath(), cookieName);      else        callback.open(env, savePath, cookieName);    }    //    // Use cookies to transmit session id    //     if (env.getIni("session.use_cookies").toBoolean()) {      if (sessionIdValue != null)        sessionId = sessionIdValue.toString();      if (sessionId == null || "".equals(sessionId)) {        Cookie []cookies = env.getRequest().getCookies();        for (int i = 0; cookies != null && i < cookies.length; i++) {          if (cookies[i].getName().equals(cookieName)              && ! "".equals(cookies[i].getValue())) {            sessionId = cookies[i].getValue();            generateCookie = false;          }        }      }      if (! generateCookie)        env.addConstant("SID", env.getEmptyString(), false);    }    //    // Use URL rewriting to transmit session id    //    if (env.getIniBoolean("session.use_trans_sid")	&& ! env.getIniBoolean("session.use_only_cookies")) {      if (sessionId == null) {        if (sessionIdValue != null)          sessionId = sessionIdValue.toString();        if (sessionId == null || "".equals(sessionId))          sessionId = env.getRequest().getParameter(cookieName);        if (sessionId == null || "".equals(sessionId)) {          sessionId = env.generateSessionId();          create = true;        }      }      env.addConstant("SID", env.createString(cookieName + '=' + sessionId),                      false);            OutputModule.pushUrlRewriter(env);    }        if (sessionId == null || "".equals(sessionId)) {      sessionId = env.generateSessionId();      create = true;    }    if (response.isCommitted())      env.warning(L.l("cannot send session cache limiter headers because response is committed"));    else {      Value cacheLimiterValue = env.getIni("session.cache_limiter");      String cacheLimiter = String.valueOf(cacheLimiterValue);      Value cacheExpireValue = (LongValue)env.getSpecialValue("cache_expire");      if (cacheExpireValue == null)        cacheExpireValue = env.getIni("session.cache_expire");      int cacheExpire = cacheExpireValue.toInt() * 60;      if ("nocache".equals(cacheLimiter)) {        response.setHeader("Expires", "Thu, 19 Nov 1981 08:52:00 GMT");        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");        response.setHeader("Pragma", "no-cache");      }      else if ("private".equals(cacheLimiter)) {        response.setHeader("Cache-Control", "private, max-age=" + cacheExpire + ", pre-check=" + cacheExpire);      }      else if ("private_no_expire".equals(cacheLimiter)) {        response.setHeader("Cache-Control", "private, max-age=" + cacheExpire + ", pre-check=" + cacheExpire);      }      else if ("public".equals(cacheLimiter)) {        response.setHeader("Cache-Control", "max-age=" + cacheExpire + ", pre-check=" + cacheExpire);      }      else if ("none".equals(cacheLimiter)) {      }      else {        response.setHeader("Cache-Control", cacheLimiter + ", max-age=" + cacheExpire + ", pre-check=" + cacheExpire);      }    }    SessionArrayValue session = env.createSession(sessionId, create);    sessionId = session.getId();    if (env.getIni("session.use_cookies").toBoolean() && generateCookie) {      generateSessionCookie(env, sessionId);    }    env.setSpecialValue("caucho.session_id", env.createString(sessionId));    return true;  }  /**   * Sends a new session cookie.   */  private static void generateSessionCookie(Env env, String sessionId)  {     final HttpServletResponse response = env.getResponse();       String cookieName = env.getIni("session.name").toString();        env.addConstant("SID",             env.createString(cookieName + '=' + sessionId),            false);    Cookie cookie = new Cookie(cookieName, sessionId);    // #2649    cookie.setVersion(1);    if (response.isCommitted()) {      env.warning(L.l("cannot send session cookie because response is committed"));    }    else {      Value path = env.getIni("session.cookie_path");      cookie.setPath(path.toString());      Value maxAge = env.getIni("session.cookie_lifetime");      if (maxAge.toInt() != 0)        cookie.setMaxAge(maxAge.toInt());      Value domain = env.getIni("session.cookie_domain");      // this is for 3rd party servlet containers that don't check the domain      // before sending the cookie      if (domain.length() > 0) {        cookie.setDomain(domain.toString());      }            Value secure = env.getIni("session.cookie_secure");      cookie.setSecure(secure.toBoolean());      response.addCookie(cookie);    }  }  /**   * Unsets the specified session values   */  public boolean session_unregister(Env env, Value key)  {    Value value = env.getGlobalValue("_SESSION");    if (! value.isArray())      return false;    value.remove(key);    return true;  }  /**   * Unsets the session values   */  public Value session_unset(Env env)  {    Value value = env.getGlobalValue("_SESSION");    if (! value.isArray())      return NullValue.NULL;    ArrayValue array = value.toArrayValue(env);        array.clear();    return NullValue.NULL;  }  /**   * Writes the session and closes it.   */  public static Value session_write_close(Env env)  {    env.sessionWriteClose();    return NullValue.NULL;  }  /**   * Converts an integer to a printable character   */  private static char encode(long code)  {    code = code & 0x3f;    if (code < 26)      return (char) ('a' + code);    else if (code < 52)      return (char) ('A' + code - 26);    else if (code < 62)      return (char) ('0' + code - 52);    else if (code == 62)      return '_';    else      return '-';  }  static final IniDefinition INI_SESSION_SAVE_PATH    = _iniDefinitions.add("session.save_path", "", PHP_INI_ALL);  static final IniDefinition INI_SESSION_NAME    = _iniDefinitions.add("session.name", "PHPSESSID", PHP_INI_ALL);  static final IniDefinition INI_SESSION_SAVE_HANDLER    = _iniDefinitions.add("session.save_handler", "files", PHP_INI_ALL);  static final IniDefinition INI_SESSION_AUTO_START    = _iniDefinitions.add("session.auto_start", false, PHP_INI_ALL);  static final IniDefinition INI_SESSION_GC_PROBABILITY_START    = _iniDefinitions.add("session.gc_probability_start", true, PHP_INI_ALL);  static final IniDefinition INI_SESSION_GC_DIVISOR    = _iniDefinitions.add("session.gc_divisor", 100, PHP_INI_ALL);  static final IniDefinition INI_SESSION_GC_MAXLIFETIME    = _iniDefinitions.add("session.gc_maxlifetime", 1440, PHP_INI_ALL);  static final IniDefinition INI_SESSION_SERIALIZE_HANDLER    = _iniDefinitions.add("session.serialize_handler", "quercus", PHP_INI_ALL);  static final IniDefinition INI_SESSION_COOKIE_LIFETIME    = _iniDefinitions.add("session.cookie_lifetime", 0, PHP_INI_ALL);  static final IniDefinition INI_SESSION_COOKIE_PATH    = _iniDefinitions.add("session.cookie_path", "/", PHP_INI_ALL);  static final IniDefinition INI_SESSION_COOKIE_DOMAIN    = _iniDefinitions.add("session.cookie_domain", "", PHP_INI_ALL);  static final IniDefinition INI_SESSION_COOKIE_SECURE    = _iniDefinitions.add("session.cookie_secure", "", PHP_INI_ALL);  static final IniDefinition INI_SESSION_USE_COOKIES    = _iniDefinitions.add("session.use_cookies", true, PHP_INI_ALL);  static final IniDefinition INI_SESSION_USE_ONLY_COOKIES    = _iniDefinitions.add("session.use_only_cookies", true, PHP_INI_ALL);  static final IniDefinition INI_SESSION_REFERER_CHECK    = _iniDefinitions.add("session.referer_check", "", PHP_INI_ALL);  static final IniDefinition INI_SESSION_ENTROPY_FILE    = _iniDefinitions.add("session.entropy_file", "", PHP_INI_ALL);  static final IniDefinition INI_SESSION_ENTROPY_LENGTH    = _iniDefinitions.add("session.entropy_length", false, PHP_INI_ALL);  static final IniDefinition INI_SESSION_CACHE_LIMITER    = _iniDefinitions.add("session.cache_limiter", "nocache", PHP_INI_ALL);  static final IniDefinition INI_SESSION_CACHE_EXPIRE    = _iniDefinitions.add("session.cache_expire", 180, PHP_INI_ALL);  static final IniDefinition INI_SESSION_USE_TRANS_SID    = _iniDefinitions.add("session.use_trans_sid", false, PHP_INI_ALL);  static final IniDefinition INI_SESSION_BUG_COMPAT_42    = _iniDefinitions.add("session.bug_compat_42", true, PHP_INI_ALL);  static final IniDefinition INI_SESSION_BUG_COMPAT_WARN    = _iniDefinitions.add("session.bug_compat_warn", true, PHP_INI_ALL);  static final IniDefinition INI_SESSION_HASH_FUNCTION    = _iniDefinitions.add("session.hash_function", false, PHP_INI_ALL);  static final IniDefinition INI_SESSION_HASH_BITS_PER_CHARACTER    = _iniDefinitions.add("session.hash_bits_per_character", 4, PHP_INI_ALL);  static final IniDefinition INI_URL_REWRITER_TAGS    = _iniDefinitions.add("url_rewriter.tags", "a=href,area=href,frame=src,form=,fieldset=", PHP_INI_ALL);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?