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 + -
显示快捷键?