void XDebugServer::onRequestInit() { if (!XDEBUG_GLOBAL(RemoteEnable)) { return; } // Need to turn on debugging regardless of the remote mode in order to // capture exceptions/errors if (!DebugHookHandler::attach<XDebugHookHandler>()) { raise_warning("Could not attach xdebug remote debugger to the current " "thread. A debugger is already attached."); return; } // Grab $_GET, $_COOKIE, and the transport const ArrayData* globals = get_global_variables()->asArrayData(); Array get = globals->get(s_GET).toArray(); Array cookie = globals->get(s_COOKIE).toArray(); Transport* transport = g_context->getTransport(); // Need to check $_GET[XDEBUG_SESSION_STOP]. If set, delete the session // cookie const Variant sess_stop_var = get[s_SESSION_STOP]; if (!sess_stop_var.isNull()) { cookie.set(s_SESSION, init_null()); if (transport != nullptr) { transport->setCookie(s_SESSION, empty_string()); } } // Need to check $_GET[XDEBUG_SESSION_START]. If set, store the session // cookie with $_GET[XDEBUG_SESSION_START] as the value const Variant sess_start_var = get[s_SESSION_START]; if (sess_start_var.isString()) { String sess_start = sess_start_var.toString(); cookie.set(s_SESSION, sess_start); if (transport != nullptr) { int64_t expire = XDEBUG_GLOBAL(RemoteCookieExpireTime); if (expire > 0) { timespec ts; Timer::GetRealtimeTime(ts); expire += ts.tv_sec; } transport->setCookie(s_SESSION, sess_start, expire); } } }
bool f_setcookie(CStrRef name, CStrRef value /* = null_string */, int64_t expire /* = 0 */, CStrRef path /* = null_string */, CStrRef domain /* = null_string */, bool secure /* = false */, bool httponly /* = false */) { Transport *transport = g_context->getTransport(); if (transport) { return transport->setCookie(name, value, expire, path, domain, secure, httponly, true); } return false; }
bool f_setrawcookie(const String& name, const String& value /* = null_string */, int64_t expire /* = 0 */, const String& path /* = null_string */, const String& domain /* = null_string */, bool secure /* = false */, bool httponly /* = false */) { Transport *transport = g_context->getTransport(); if (transport) { return transport->setCookie(name, value, expire, path, domain, secure, httponly, false); } return false; }
void XDebugServer::onRequestInit() { if (!XDEBUG_GLOBAL(RemoteEnable)) { return; } // TODO(#4489053) Enable this when debugger internals have been refactored // Need to turn on debugging regardless of the remote mode in order to // capture exceptions/errors // ThreadInfo *ti = ThreadInfo::s_threadInfo.getNoCheck(); // ti->m_reqInjectionData.setDebugger(true); // Grab $_GET, $_COOKIE, and the transport const ArrayData* globals = get_global_variables()->asArrayData(); Array get = globals->get(s_GET).toArray(); Array cookie = globals->get(s_COOKIE).toArray(); Transport* transport = g_context->getTransport(); // Need to check $_GET[XDEBUG_SESSION_STOP]. If set, delete the session // cookie const Variant sess_stop_var = get[s_SESSION_STOP]; if (!sess_stop_var.isNull()) { cookie.set(s_SESSION, init_null()); if (transport != nullptr) { transport->setCookie(s_SESSION, empty_string()); } } // Need to check $_GET[XDEBUG_SESSION_START]. If set, store the session // cookie with $_GET[XDEBUG_SESSION_START] as the value const Variant sess_start_var = get[s_SESSION_START]; if (sess_start_var.isString()) { String sess_start = sess_start_var.toString(); cookie.set(s_SESSION, sess_start); if (transport != nullptr) { transport->setCookie(s_SESSION, sess_start, XDEBUG_GLOBAL(RemoteCookieExpireTime)); } } }