sesion - set cookie php
Sesiones PHP con cookies desactivadas, ¿funciona? (8)
Hoy tuve una entrevista de skype para un trabajo como desarrollador de PHP, una de las preguntas fue sobre Cookies y sesiones de PHP.
La pregunta era si la sesión de PHP puede establecerse y leerse, usarse, si las Cookies están deshabilitadas en el navegador de los usuarios.
Les dije que no, porque las Sesiones PHP por defecto dependen de la configuración de una cookie de sesión. Cuando se inicia la sesión PHP, la nueva sesión Cookie se establece con el nombre predeterminado PHPSESSID, y esa cookie contiene el valor de esa ID de sesión, por ejemplo: ftu63d8al491s5gatuobj39gk7 Luego, en el servidor apache en la carpeta tmp se crea el archivo sess_ftu63d8al491s5gatuobj39gk7 y contiene el contenido de esa sesión, por ejemplo : test1 | s: 12: "SessionTest1"; test2 | s: 12: "SessionTest2";
Me dijeron que eso no era cierto, y que puedes usar PHP Session incluso si el usuario deshabilita las cookies en su navegador.
Luego les dije que puedes hacer eso, pero luego la ID de la sesión pasará a través de la URL como variable GET. Y eso no es seguro y debes configurarlo en php.ini.
Estaban hablando sobre cómo puede usar las Sesiones PHP incluso si las Cookies están deshabilitadas en el navegador. Y qué sucede si estamos construyendo una tienda web, y una abuela utiliza nuestra tienda web y deshabilita las cookies, y ella no importa. Y que las Sesiones PHP son geniales porque puedes usarlas incluso si el usuario deshabilita las Cookies. ¡¡Estaba como un hombre, ¿qué tal?!?!
Hice la prueba con dos archivos, index.php inicia sesión y establece variables de sesión. Y luego session.php intenta leer las variables de la sesión.
Así es como se ve:
index.php
<p>This is where I start and set php sessions.</p>
<?php
session_start();
$_SESSION[''test1''] = "SessionTest1";
$_SESSION[''test2''] = "SessionTest2";
?>
<p>This is a link, that starts new HTTP Request, and tries to read session set on this page:</p>
<p><a href="session.php">Read Session</a></p>
session.php
<?php
session_start();
var_export($_SESSION);
?>
<p><a href="index.php">Back</a></p>
Ahora, si habilita las cookies en su navegador, visite index.php y se imprimirá la sesión session.php.
Pero, si borra el historial de su navegador y las cookies, y luego visita index.php, y luego visita session.php, verá una matriz vacía ¿no?
Entonces, básicamente mi pregunta es, ¿estoy en lo cierto? ¿Puedes usar sesiones de PHP si deshabilitas las cookies en tu navegador? ¿Y el mecanismo de sesión PHP por defecto, depende de establecer una sesión COOKIE?
Actualización: me estaba volviendo loco por esto, así que volví a llamar al tipo con el que estaba hablando. Y le pregunté si la sesión PHP puede funcionar sin cookies de manera predeterminada. El tipo dijo "sí". Luego le dije que estaba equivocado y me dijo: "sí, sí, si tú lo dices ..." y se echó a reír. Entonces le dije, está bien si la sesión de PHP puede funcionar sin configurar la cookie, ¿cómo sabría el servidor la identificación de la sesión del usuario / navegador actual, si no está almacenada en una cookie de sesión? (Quería ver si él sabe que la identificación de la sesión se puede pasar como variable GET) Y estuvo callado durante al menos 20 años, y me dijo que él es un administrador del sistema, y que debería preguntarle al desarrollador. Y que tiene 43 años y una gran experiencia de 13 años en el negocio (comenzó con 30? Wtf?), Pero confía en mí en este caso. Y le expliqué cómo funciona la sesión y que puede usarla sin Cookie, pero luego la ID de sesión se pasa como variable GET, y le dije que se lo dije en la entrevista, pero me dijeron que no, que no ...: S
Básicamente, el tipo no tenía ni idea de las sesiones de PHP y PHP, y sí, fue él quien me preguntó sobre las sesiones que me decía que PHP Session podía funcionar sin cookies, incluso cuando le dije que no se podía hacer, y que hay una forma de usar sesiones de PHP sin cookies, pero no funcionará de manera predeterminada. Era como, no, no ... Al final me dijo que estaba pensando que las sesiones pueden funcionar sin cookies porque él, como administrador del sistema en sus servidores, nunca puede ver las sesiones en la carpeta tmp?!?!?
De todos modos, esos tipos apestan con PHP, no hay manera de que acepte la oferta de trabajo de ellos, y después de todo esto, no creo que me ofrezcan un trabajo de todos modos ...
¡Gracias por todos los comentarios!
"A un visitante que acceda a su sitio web se le asigna un ID único, el llamado ID de sesión. Esto se almacena en una cookie en el lado del usuario o se propaga en la URL".
Entonces, básicamente mi pregunta es, ¿estoy en lo cierto?
Principalmente. En el mundo real: SÍ .
¿Puedes usar sesiones de PHP si deshabilitas las cookies en tu navegador?
PUEDE utilizar sesiones de PHP sin cookies, siempre que la identidad del navegador se obtenga de alguna manera y produzca un valor único (y este valor se transfiere a la capa de sesión de PHP):
- ID de sesión en GET (que es la forma "estándar" de PHP si no se permiten las cookies, y la "otra" forma que describió). Este valor se propaga automáticamente por PHP, por ejemplo, se agrega a todos los HREF y así sucesivamente. Donde no se propaga porque el reconocimiento del enlace automágico falló (por ejemplo, URL compleja construida en Javascript), es su responsabilidad proporcionarlo en consecuencia.
O bien, y aquí ya no estamos en Kansas:
- pasado entre los nonces con Auth Digest (este es un truco sucio, y por supuesto requiere que todo el sitio esté detrás de un esquema de autenticación de acceso Auth-Digest. Y ya no se puede usar una "autofactura ficticia" (es decir, http: // welcome : [email protected] ) porque algunos navegadores, por ejemplo, Internet Explorer, ya no los admiten por razones de seguridad.
- reconocer el navegador de otra manera ("huellas dactilares") ( esto es normalmente (1) suicida )
- Use LSO (Objetos locales compartidos) para generar un UUID aleatorio si aún no está allí y guárdelo para poder recuperarlo en los accesos posteriores.
- otras formas (ver http://en.wikipedia.org/wiki/Evercookie )
(1) si estaba en una LAN donde puede confiar en las IP, podría asociar una "sesión" a la IP del usuario. Puede aplicar una estricta política de "no cookies" en una empresa pequeña y seguir teniendo sesiones de usuario sin recurrir a _GET / _POST para su ID de sesión.
¡Creo que hay una tercera forma de almacenamiento de sesiones HTML5! ¿Qué ocurre si guardamos los datos de la sesión de forma manual en el servidor y buscamos toda la página personalizada con AJAX según un ID de sesión almacenado en el almacenamiento de la sesión?
El problema es que el almacenamiento de la sesión también se puede deshabilitar: https://.com/a/25050910/8460132
Deberá poner la ID de la sesión en la URL. Tendrá que hacer un cambio en su archivo php.ini, de modo que si está en un host compartido, tendrá que ponerse en contacto con ellos para ver lo que harán por usted.
Sí ... Funcionará
1.PHP pasará un parámetro GET en URL con el nombre PHPSESSID, pero se puede cambiar session.name en el archivo php.ini.
2. Agrega una entrada oculta en formularios con el mismo nombre.
Sí, la sesión funcionará cuando las cookies estén deshabilitadas. Pero primero apache compruebe la configuración de php. Me gusta:
--enable-trans-sid
and
--enable-track-vars
si estos valores se establecen como verdaderos, la sesión pasará automáticamente por POST.
Si los valores "--enable-trans-sid" y "--able-track-vars" están configurados en FALSE, necesitamos pasar la identificación de la sesión utilizando la constante SID.
< a href="index.php?<?= SID ?>" >Navigate from here< /a >
Necesita establecer php.ini
ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
Si fuera yo, diría "Sí"
Ya que podría almacenar la sesión en form / url en algún lugar para pasar a la página siguiente (muy mala idea). Entonces, en base a su pregunta "¿se puede configurar y leer la sesión de PHP, usarla, si las Cookies están deshabilitadas en el navegador de los usuarios?"
Entonces, debería ser sí. Puede leer y usar.
Sin embargo, si el usuario cierra el navegador, entonces desapareció, y eso es todo. (ya que ese tipo no preguntó sobre esta parte)
Si session.use_cookies = 1 (Cookie habilitada)
Si session.use_cookies = 0 (Cookie deshabilitada)
Si session.use_cookies = 1, la sesión almacena el sessionId en una cookie. Al llamar a session_id () obtener el sessionId almacenado desde la cookie y los datos guardados en la matriz de sesión se encontrarán en todas las páginas. Si session.use_cookies = 0 En este caso, la sesión no almacena sessionId en la cookie y usted obtendrá cada vez que una nueva sessionId usando session_id () y los datos almacenados en la sesión en otras páginas no se encontrarán en otras páginas.