localstorage guardar ejemplos datos javascript php cookies

guardar - localstorage javascript ejemplos



Etiquetar cookies específicas sin usar sessionStorage o cualquier característica de HTML5 (7)

¡Antes que nada, esta solución funciona si solo usas URLs relativas! (para imágenes, enlaces e incluso llamadas Ajax)

Use las sesiones como lo haría en cualquier escenario ordinario con un pequeño cambio. En lugar de identificar a los usuarios con cada ID de sesión, identificará una máquina (un navegador) por cada ID de sesión. Entonces, cuando las solicitudes llegan al servidor, identifica a un grupo de usuarios que usan su sitio web en esa computadora. Cada usuario tendrá su propio identificador secundario (podría ser un contador secuencial o un número aleatorio). Poniéndolo simple, los datos de su sesión (identificados por ID de sesión en las cookies) contienen una matriz asociativa. Cada entrada de esta matriz contiene datos de sesión para un usuario particular identificado por un subidentificador. Por ejemplo, en PHP, si el sub-identificador de su usuario es user0 , entonces puede acceder a los datos de esta sesión de usuario como:

<?php session_start(); $user_data = $_SESSION[''user0''];

Lo siguiente es cómo pasar el subidentificador del usuario.

Puede usar la reescritura de URL del servidor web. Necesitas encontrar un patrón que se pueda considerar como un nombre de carpeta común, mientras que no hay una carpeta así nombrada. Por ejemplo:

RewriteEngine On RewriteRule ^user(/d+)//(.*)$ $2?sub_id=$1 [QSA,L]

En este ejemplo, no tiene permitido tener carpetas como user0 , user1 , etc. Si alguna solicitud solicita http://domain.com/user0/index.php , se reescribirá en http://domain.com/index.php?sub_id=user0 . Ahora en index.php tendrás:

<?php session_start(); $user_data = $_SESSION[$_REQUEST[''sub_id'']];

Y debe usar $user_data lugar de $_SESSION partir de ahora. Lo único que queda es cómo generar un subidentificador por primera vez. Eso es relativamente fácil, puedes:

<?php session_start(); if (!isset($_REQUEST[''sub_id''])) { $sub_id = 0; while (isset($_SESSION["user{$sub_id}"])) { $sub_id++; } $_SESSION["user{$sub_id}"] = array(); header("Location: /user{$sub_id}".$_SERVER[''REQUEST_URI'']); die(); } else { $user_data = $_SESSION[$_REQUEST[''sub_id'']]; }

¡Al final, todo funcionará solo si todas tus URL son relativas! Cada URL absoluta que no comienza con /user0/ se considerará un nuevo usuario y dará lugar a una nueva entrada en la sesión.

El beneficio de este enfoque es que su código actual funcionará con el mínimo esfuerzo, siempre y cuando las direcciones URL ya se hayan abordado de manera relativa.

Me interesa que los usuarios puedan iniciar sesión y cerrar sesión con múltiples cookies de sesión de usuario en mi aplicación web. Actualmente, la autenticación se realiza de forma estándar y un identificador único me permite autenticar a un usuario cuando visita nuestro sitio si presentan un token de autenticación que está disponible en su cookie. Los casos de uso típicos se aplican porque si el usuario cierra la sesión de una pestaña, los desconecta de otra pestaña. En este momento, es necesario que el usuario inicie sesión desde dos instancias únicas del navegador para poder iniciar sesión en dos cuentas diferentes.

¿Hay una forma no HTML5 (usando cookies javascript estándar) para tener identificadores de cookies específicos de la pestaña? Asumo que no hay una forma clara de solucionar esto y que requeriría algún tipo de hack + cooperación del back-end. Si hay una solución que tenga sentido sin usar HTML5, sería ideal.


Este es un ejemplo simple de cómo puede crear un sistema en el que un usuario puede iniciar sesión en varias cuentas. Esto no es controles de seguridad y debe agregarse. Este código puede ser mucho mejor para escribir y optimizar.

inc.php

https://github.com/maksa9/multiple-user-login/blob/master/inc.php

Este archivo está incluido en cada script php.

Esta parte verifica qué usuario está conectado y qué cuenta está activa. Aquí hay funciones que crean la ruta correcta a los scripts php de acuerdo con la cuenta activa

// check which user is logged and which account is active if(isset($_GET[''user''])) $id_user = (int)$_GET[''user'']; if($id_user > 0) { if(isset($_SESSION[''user''][$id_user])) { $user_name = $_SESSION[''user''][$id_user][''name'']; $user_email = $_SESSION[''user''][$id_user][''email'']; } else gotToLoginForm(); } // If the user id is not specified and there is a user session, finds another id if($id_user == 0 and isset($_SESSION[''user''])) { $sess = $_SESSION[''user'']; $id_user = (int)key($sess); if(isset($_SESSION[''user''][$id_user])) { $user_name = $_SESSION[''user''][$id_user][''name'']; $user_email = $_SESSION[''user''][$id_user][''email'']; define(''ID_USER'',$id_user); gotToIndex(); } else gotToLoginForm(); } define(''ID_USER'',$id_user);

loginform.php

https://github.com/maksa9/multiple-user-login/blob/master/loginform.php

Forma simple para iniciar sesión con el método de publicación.

login.php

https://github.com/maksa9/multiple-user-login/blob/master/login.php

Usuario de inicio de sesión simula una consulta a la base de datos.

if(isset($_POST[''email''])) if(isset($_POST[''pass''])) { $email = $_POST[''email'']; $pass = $_POST[''pass'']; $id_user = 0; // simulates a query to the database if($email === ''[email protected]'' and $pass === ''111'') { $id_user = 1; $name=''John Doe''; } if($email === ''[email protected]'' and $pass === ''222'') { $id_user = 2; $name = ''Doe John''; } // login user if($id_user > 0) { // checks if the user is already logged if( !isset($_SESSION[''user''][$id_user])) { $_SESSION[''user''][$id_user] = array(''email''=>$email, ''name''=>$name); } //go to main page $page = ROOT.''user/''.$id_user.''/index.php''; header(''Location: ''.$page); exit; } }

index.php

https://github.com/maksa9/multiple-user-login/blob/master/index.php

Página principal de la aplicación.

<div> <h1>Welcome: <?php echo $user_name ?> (<?php echo $user_email ?>) [<?php echo $id_user ?>]</h1> <p><a href="<?php echo returnUrl(''swap.php'',$id_user) ?>">Choose an account</a></p> <p><a href="<?php echo returnUrl(''loginform.php'',$id_user) ?>">Login with the another account</a></p> <p><a href="<?php echo returnUrl(''logout.php'',$id_user) ?>">Log out</a></p> </div>

swap.php

https://github.com/maksa9/multiple-user-login/blob/master/swap.php

Permite al usuario elegir la cuenta.

foreach($_SESSION[''user''] as $idus => $userA) { echo ''<p><a href="''.returnUrl(''index.php'',$idus).''">''.$userA[''name''].'' (''.$userA[''email''].'') [''.$idus.'']</a></p>''; }

logout.php

https://github.com/maksa9/multiple-user-login/blob/master/logout.php

Cerrar sesión usuario Verifique si hay cuentas de usuario activas y las redirige si corresponde.

unset($_SESSION[''user''][ID_USER]); if(count($_SESSION[''user'']) == 0) unset($_SESSION[''user'']); // checks for active user accounts and redirects them if any if(isset($_SESSION[''user''])) { $sess = $_SESSION[''user'']; $id_user = (int)key($sess); if(isset($_SESSION[''user''][$id_user])) { $page = ROOT.''user/''.$id_user.''/index.php''; header(''Location: ''.$page); exit; } }

.htaccess

https://github.com/maksa9/multiple-user-login/blob/master/.htaccess

Options +FollowSymlinks RewriteEngine On RewriteRule ^user//([0-9]*)//index.php$ index.php?user=$1 [NC,L] RewriteRule ^user//([0-9]*)//logout.php$ logout.php?user=$1 [NC,L] RewriteRule ^user//([0-9]*)//login.php$ login.php?user=$1 [NC,L] RewriteRule ^user//([0-9]*)//loginform.php$ loginform.php?user=$1 [NC,L] RewriteRule ^user//([0-9]*)//swap.php$ swap.php?user=$1 [NC,L] RewriteRule ^user//$ index.php [NC,L] RewriteRule ^user$ index.php [NC,L]


La respuesta de Well @ dm4web es correcta, pero hay que prestar atención a sus advertencias de seguridad. Lo mejor que puedes hacer es adoptar un enfoque bidireccional.

Dirección uno

Regular Login. Create a Unique session ID and pass it via the URL.

Dirección dos

Check Session via i) Logged In User and ii) Check Session ID via URL Param

Ahora, tomemos un ejemplo:

$usrname: Fool $psswd: dm4web

Código PHP

session_start(); //all inputs should be sanitized $sql = "SELECT * FROM `users` WHERE `usrname`=''".$usrname."'' AND `psswd` = ''".$psswd."''": $dbh = new PDO(''odbc:db'', ''db2inst1'', ''ibmdb2''); $count = $dbh->exec($sql); if($count > 0){ //Guy is logged in $a = session_id(); //**Use this $a in every URL parameter under current session** } else { //Go f**k yourself >> to the user ;) }

Pero debe notar que no puede saltar directamente a ese esquema de coincidencia de usuario / pase. Primero debe asegurarse de averiguar si el usuario ya inició sesión o no. Además, en función de la cookie SESSION de PHP, descubres que

  1. Si hay un inicio de sesión activo en la máquina
  2. Si hay un inicio de sesión activo en la URL [vide los $ a de la cosa session_id]

¡Haga coincidir el parámetro URL bajo cualquier circunstancia, haga una referencia cruzada con la cookie SESSION y continúe!

¡Buena suerte! ¡Avísame si tienes más preguntas!


Las cookies de sesión son AFAIK específicas del servidor, por lo que lo que se puede hacer es configurar diferentes nombres DNS para el mismo servidor, por ejemplo, subdominios como: session1.myserver.com, session2.myserver.com, session3.myserver.com


Logré un comportamiento similar hace algún tiempo. Entonces, lo que hago es algo como esto:

  1. Para que esto funcione, debe llevar el ID de sesión en la url o como parte del contenido de la página.
  2. Cuando se carga la página de inicio de sesión, elimine la cookie sessionId.
  3. Cuando se ingresa para iniciar sesión, el servidor le da la página de inicio de sesión junto con sessionId en la url o como parte del cuerpo de respuesta html.
  4. De ahora en adelante, antes de cada llamada al servidor, configure la cookie de sesión como la que tiene en el contenido de la url o de la página.
  5. Por lo tanto, cada pestaña establecerá su propia cookie antes de cualquier llamada al servidor que haría que la solicitud aterrice con la sesión correcta en el servidor.

No puedes.

Hay formas de lidiar con esta condición, pero ninguna de ellas es simple.

Si lo desea, debe decirle al usuario que haga esto: Cómo geek

De documentos: los datos almacenados con sessionStorage no persisten en las pestañas del navegador, incluso si dos pestañas contienen páginas web del mismo origen de dominio. En otras palabras, los datos dentro de sessionStorage están confinados no solo al dominio y directorio de la página de invocación, sino también a la pestaña del navegador en la que se encuentra la página. Contraste eso con las cookies de sesión, que persisten datos de pestaña a pestaña.


No puedes

Cuando se crea una cookie, es posible controlar su visibilidad configurando su ''dominio raíz''. Luego será accesible para cualquier URL que pertenezca a esa raíz. Por ejemplo, la raíz podría establecerse en "example.com" y la cookie estaría disponible para los sitios en "www.example.com" o "xyz.example.com" o "example.com". Esto podría usarse para permitir que las páginas relacionadas se ''comuniquen'' entre sí. No es posible establecer el dominio raíz en dominios de ''nivel superior'' como ''.com'' o ''.co.uk'', ya que esto permitiría un acceso generalizado a la cookie.

De forma predeterminada, las cookies son visibles para todas las rutas en sus dominios, pero en el momento de la creación se pueden restringir a una subruta determinada, por ejemplo, "www.example.com/images".

por lo tanto, cualquier pestaña que tenga el mismo dominio raíz puede acceder a esa cookie.