Per la maggior parte degli accessi automatici, lo so, esiste una tabella separata per memorizzare le sessioni registrate. Ad ogni sessione di auto-login viene assegnata una chiave hash come identificatore, la chiave è considerevolmente lunga e praticamente impossibile da falsificare. Se non si desidera che gli utenti vengano registrati in cross-ip anche con un codice valido, provare questo.
function gen_uniqueIdent($length=32){
$alphabet = str_split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789');
$key = '';
for($loop=0;$loop<$length;$loop++){
$i = mt_rand(0,count($alphabet)-1);
$key.= $alphabet[$i];
}
return $key;
}
Assegnare questo valore al cookie utente al momento dell'accesso. Quindi memorizzarlo nel db:
function save_ident($identFromFunctionAbove,$authenticated_user_id){
//hash this with something unique to the user's machine
$hashed = md5($identFromFunctionAbove . $_SERVER['REMOTE_ADDR']);
/** Some actions to remember this hash **/
}
salvarlo in un database che corregge con un'identità utente come id_utente.
ora su di convalida del cookie dell'utente, si può semplicemente:
function validateCookie(){
$ident = $_COOKIE['yourCookieName'];
$hashed = md5($ident . $_SERVER['REMOTE_ADDR']);
/** Check if this hashed value exists in db, if it does, authenticate user **/
}
Avrete anche bisogno di rimuovere le sessioni dopo la scadenza o l'utente si disconnette esplicitamente.
Naturalmente questo è molto semplice e non tiene conto di collisioni md5 o ident. Tuttavia, ottenere due stringhe generate a caso da 32 caratteri per essere uguali a quelle generate in precedenza è una possibilità piuttosto sottile.
"Quando un utente visita il tuo sito web, puoi controllare il valore di quel cookie e ottenere l'utente a cui appartiene e registrarli in" Qual è il modo migliore per farlo? Basta reindirizzarli alla pagina protetta con il loro utente/passare dal db? – CodeCrack
@CodeCrack Hai il controllo completo sull'autenticazione o meno di un utente, quindi non c'è davvero il modo migliore. Fai semplicemente la stessa cosa che faresti dopo aver inserito il nome utente/password. Probabilmente hai (o puoi creare) una funzione o qualcosa chiamato 'complete_login()' i dati necessari alla sessione. –
Qual è il vantaggio di distruggere il vecchio token all'accesso? Presumo che una nuova sarà passata al cliente in quel momento, vero? – Uwe