61 votes

Session PHP sans cookies

Existe-t-il un moyen de lancer une session persistante en PHP sans placer de cookie de session ? Existe-t-il d'autres moyens de maintenir une session entre les pages, comme une solution basée sur l'adresse IP ?

La raison de ma demande est que, bien que la plupart des utilisateurs aient activé les cookies, je veux voir s'il existe un moyen pour qu'un système de connexion fonctionne pour ceux qui les ont désactivés (même si je pense personnellement que la désactivation des cookies n'est qu'une paranoïa inutile).

0voto

Aryan amish Points 1

Si je voulais faire cela, j'ajouterais l'identifiant de session dans le code HTML sous la forme d'une balise de commentaire et j'utiliserais et configurerais le code PHP pour utiliser cet identifiant de session qui est inclus dans le code HTML. Je pense qu'il sera plus pertinent de procéder ainsi plutôt que de le faire avec l'IP de l'utilisateur ou d'ajouter l'identifiant de session dans l'URL.

0 votes

+1 semble représenter beaucoup de travail mais c'est certainement une solution de contournement url-session-ids et cookies. peut-être même plus sûr si vous avez une chaîne aléatoire générée par formulaire. en combinant la chaîne aléatoire du formulaire et un session-id caché, vous êtes presque certain qu'un utilisateur autorisé fait la demande. je sais que ror utilise quelque chose de ce genre. guides.rubyonrails.org/form_helpers.html

0voto

Oliver Williams Points 1269

La réponse correcte à cette question est NON. L'utilisation de toute combinaison de variables autres qu'un cookie n'est pas sécurisée.

Pensez-y : lorsqu'un utilisateur demande une page pour la première fois, le serveur envoie la page accompagnée d'une valeur unique indiquant "HTTP is stateless, keep this so I know it's 'you' next time you call". Cela signifie que cette personne, dans ce navigateur (quel que soit l'onglet), à ce moment-là, a un jeton unique.

Si et seulement s'il s'est connecté avec succès, ce jeton peut maintenant être lié à une session du côté du serveur. Les jetons sont censés être si longs et aléatoires que personne ne peut en deviner un à temps.

Plusieurs navigateurs peuvent utiliser la même adresse IP. Plusieurs personnes peuvent avoir EXACTEMENT le même agent utilisateur. Un cookie est le seul système de stockage qui fonctionne.

Il y a en fait un autre moyen, et c'est d'ajouter le jeton unique à chaque lien unique vers le serveur ainsi que tous les appels AJAX, comme ?PHPSESSID=my-unique-token-189481958 - mais c'est une douleur à coder.

0voto

catiadesign Points 1

Vous pouvez également vous connecter sans cookies en utilisant uniquement l'ID de session et l'heure, mais vous devez les écrire dans votre base de données directement après une connexion réussie.

J'ai dans index.php quelque chose comme ceci qui générera toujours un nouvel identifiant de session en fonction du temps et l'ancien identifiant de session si les conditions ne sont pas vérifiées.

if ($_SESSION['id'] != $row['session'] || time() > $row['sessiontime']) {
    session_destroy();
    session_start();
    session_regenerate_id();
}

$_SESSION['id'] = session_id();

J'utilise 2 variables dans la base de données pour l'identifiant et l'heure.

Et dans la fenêtre de connexion, je lis l'identifiant de la session à partir de la variable $_SESSION['id'], puis j'incrémente le temps et j'envoie les deux à la base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X