php - recibir - ¿Cuándo y por qué se debe usar $_REQUEST en lugar de $_GET/$_POST/$_COOKIE?
recibir variables get php (6)
Pregunta en el título.
¿Y qué ocurre cuando $_GET[foo]
3 de $_GET[foo]
, $_POST[foo]
y $_COOKIE[foo] exist?
¿Cuál de ellos se incluye en $_REQUEST?
Cuando no está seguro de dónde se rellenan los valores o cuándo los usa y desea recorrer todos los valores con los métodos POST y GET.
En ocasiones, es posible que desee que se invoque el mismo script de varias formas diferentes. Me viene a la mente un envío de formulario y una llamada AJAX. En la mayoría de los casos, sin embargo, es mejor ser explícito.
Además, consulte http://docs.php.net/manual/en/ini.core.php#ini.request-order sobre cómo las diferentes fuentes de variables se sobrescriben si hay una colisión de nombre.
Uso POST cuando no quiero que las personas tengan fácil acceso a lo que se está pasando y utilizo GET cuando no me importa que vean el valor en la url. Por lo general, no uso cookies por mucho porque creo que SESSION está bien para valores persistentes (aunque tener un registro adecuado es la mejor manera de utilizar eso).
Yo diría que nunca.
Si quisiera que se establezca algo a través de varios métodos, codificaría cada uno de ellos para recordarme a mí mismo que lo había hecho de esa manera; de lo contrario, podría terminar sobrescribiendo cosas sin darse cuenta.
¿No debería funcionar así?
$ _GET = acciones no destructivas (clasificación, acciones de grabación, consultas)
$ _POST = acciones destructivas (eliminación, actualización)
$ _COOKIE = configuraciones triviales (preferencias de hojas de estilo, etc.)
$ _SESSION = configuración no trivial (nombre de usuario, ¿está conectado ?, niveles de acceso)
Para responder la pregunta "¿Qué sucede cuando todos existen?", La respuesta es "depende".
PHP rellena automáticamente $ _REQUEST según la directiva request_order (o variables_order si request_order está ausente) en PHP.INI. El valor predeterminado es generalmente "GPC", lo que significa que primero se carga GET, luego se carga el POST (sobrescribiendo GET si hay una colisión), luego se cargan las cookies (sobrescribiendo get / post si hay una colisión). Sin embargo, puede cambiar esta directiva en el archivo PHP.INI. Por ejemplo, al cambiarlo a "CPG" las cookies se cargan primero, luego se publican y luego se obtienen.
En cuanto a cuándo usarlo? Me haré eco del sentimiento de "nunca". Ya no confías en el usuario, entonces ¿por qué darle al usuario más herramientas? Como desarrollador, debe saber de dónde espera que provengan los datos. Se trata de reducir el área de su superficie de ataque.
$_REQUEST
es solo un atajo para evitar que $_REQUEST
publicar, obtener y cocinar si los datos pueden provenir de cualquiera de estos.
Hay algunas trampas:
- los datos se toman de GET, POST y finalmente COOKIE. La última anula la primera, así que ten cuidado con eso.
- Las arquitecturas REST requieren separar la semántica POST y GET, no puede confiar en
$_REQUEST
en ese caso.
Sin embargo, si sabes lo que estás haciendo, entonces es solo otro práctico truco de PHP .
Lo usaría si quisiera actualizar rápidamente una var que puede venir de varias fuentes. P.EJ :
- En su controlador, para decidir qué página servir sin verificar si la solicitud proviene de una acción de formulario o un enlace de hipertexto.
Para comprobar si una sesión todavía está activa, independientemente de la forma en que se transmiten las identificaciones de sesión.