2011-04-09 3 views
2

Je commence juste à apprendre à programmer en PHP et ai couru dans un domaine légèrement confus, Sessions et Cookies.But des sessions et des cookies PHP et de leurs différences

Je comprends les différences de stockage côté serveur et côté client, mais je ne vois pas comment ils se différencient et dans quelles circonstances chacun serait approprié?

En outre, j'ai vu des gens dire que le cookie pourrait être utilisé pour stocker un identifiant de session, comment cela serait-il fait et pourquoi cela serait-il avantageux?

Merci pour vos commentaires.

+2

Lorsque vous définissez une session php définit également un cookie. – Neddy

Répondre

1

L'avantage d'utiliser des cookies sur des sessions est que les cookies sont persistants. En d'autres termes, lorsque l'utilisateur visite votre site des semaines plus tard, sa session a plus que probablement expiré. Cependant, s'ils ont un cookie qui peut les identifier de manière unique dans votre script, vous pouvez les connecter automatiquement et rétablir la session.

... quelles circonstances conviendraient-elles?

La réponse ressemble à ceci:

  • Les données de session doivent contenir des informations qui n'a pas besoin d'être persistant ou est nécessaire que pour une courte période de temps. Par exemple, si vous présentez un formulaire de plusieurs pages à l'utilisateur, il est logique de tirer parti des sessions.
  • Les cookies doivent être utilisés pour stocker un ID ou un hachage qui identifie de manière unique non seulement l'utilisateur, mais également le navigateur/l'appareil avec lequel ils sont connectés. Gardez à l'esprit que les données de cookies sont hors de votre contrôle et ne peuvent être manipulées/supprimées que par des requêtes HTTP faites par l'utilisateur (ou dans certaines circonstances, par un script sur une page).

Aussi, j'ai vu des gens dire que le cookie pourrait être utilisé pour stocker un identifiant de session ...

Je suppose que l'on entend par qui stocke une valeur unique un cookie qui identifie l'utilisateur/navigateur/périphérique qu'ils utilisent. Implémenter quelque chose comme ceci ressemblerait à:

  • Laissez l'utilisateur se connecter comme ils le feraient normalement.
  • Générez un hachage unique (SHA-1 est votre meilleur pari) et stockez-le dans un cookie. Vous stockez également le hachage dans une base de données liée à cet utilisateur.
  • ...
  • L'utilisateur revient après expiration de sa session et visite une page.
  • Votre script voit le cookie et recherche l'utilisateur auquel le hachage appartient.
  • L'utilisateur est connecté.
3

Tout d'abord, nous allons briser le mythe de longue date (ou du moins je pense qu'il est un mythe existant) qu'un cookie de session est quelque chose de différent qu'un biscuit régulier. Ce n'est pas. Un cookie de session est juste un cookie régulier. Seules les propriétés du cookie de session définies (ou plutôt non définies) sont généralement différentes.Mais le mécanisme est exactement le même.

Un cookie est fixé par l'envoi d'un en-tête de réponse HTTP au navigateur:

Set-Cookie: name=value[; possible expiration-date][; other possible properties]

Ce qui distingue généralement une cookie de session d'un cookie régulier est qu'aucune date d'expiration est fixée ( ou à l'expiration date est définie sur une date dans le passé ). Ce qui signifie que le navigateur disposera le cookie après la fermeture du navigateur. Mais un cookie "régulier" peut le faire aussi bien. Ainsi, en faisant ainsi un «cookie de session» pour ainsi dire.

Maintenant que nous avons cela à l'écart; Le mécanisme par lequel les cookies sont généralement utilisés par les applications pour les faire agir comme un cookie de session, en plus des propriétés mentionnées ci-dessus, est que la valeur du cookie ne contient qu'une valeur unique identifiable de quelque sorte. Peut-être un md5 d'un hash sha1.

Chaque fois que le navigateur demande une ressource sur le serveur, il envoie le long de ce cookie (à moins qu'il ait expiré) avec un en-tête de requête HTTP comme ceci:

Cookie: name=value

Les mécanismes de session dans le backend (étant PHP dans votre cas) a lié l'identifiant unique du cookie avec des données qui ont été stockées dans un fichier dans le système de fichiers du serveur, ou peut-être dans une base de données. De cette façon, chaque fois que le cookie est reçu, il est capable de récupérer ces données et de les lier à la requête. L'avantage de ceci, est que les informations sensibles 1) peuvent être cachées de ne pas avoir à voyager sur le réseau, et 2) ne finit pas dans le cache des cookies du navigateur des utilisateurs, en le gardant sur le serveur. Donc, fondamentalement, vous voulez envoyer des informations non-sensibles et non-application-vitales dans un cookie régulier (pensez à: préférences de mise en page, une liste de lecture non persistant comme sur YouTube, etc.), et utilisez une session pour stocker des informations sensibles.

modifier:
Désolé, ignorer le « ou la date d'expiration est fixée à une date dans le passé », comme il était faux. Cela entraînera l'invalidation immédiate du cookie par le navigateur, et ne sera donc plus envoyé avec les requêtes.

0

Les cookies et les sessions sont utilisés pour conserver des informations spécifiques à l'utilisateur afin de suivre un utilisateur. Beaucoup de fois vous pouvez utiliser l'un ou l'autre, mais ils ont quelques différences.

Un cookie est un fichier texte conservé sur la machine de l'utilisateur. Chaque fois que les utilisateurs visitent votre site, il remet le cookie pour vous permettre de savoir qui il est. L'avantage est que l'information est conservée sur la machine de quelqu'un d'autre, donc vous n'avez pas à vous en préoccuper. En tant que tel, vous pouvez le laisser là jusqu'à ce que les vaches rentrent à la maison. Quand/si l'utilisateur revient, il apportera l'information avec lui. L'inconvénient est que l'information est hors de votre contrôle, car l'utilisateur peut facilement modifier le cookie que vous lui avez donné. Cela rend toute information dans un cookie indigne de confiance et doit être vérifiée chaque fois que l'utilisateur vous la donne. Une session est comme un cookie, sauf si vous conservez les informations sur votre serveur. L'avantage est que vous pouvez faire confiance à une session pour conserver les données exactement telles qu'elles étaient lorsque vous les avez placées. L'inconvénient est que vous devez stocker ces informations, ce qui signifie que vous devrez les supprimer pour éviter que votre serveur Web ne contienne des informations cela ne sera jamais utilisé.

Maintenant c'est là que ça devient un peu difficile. Vous voyez alors que le mécanisme d'une session est tel que je l'ai décrit ci-dessus, l'implémentation réelle peut varier en fonction des paramètres de PHP. Les données de session peuvent être conservées dans des fichiers texte individuels ou dans une base de données sur votre serveur. Vous avez également besoin d'un moyen de reconnaître quelle session correspond à quel utilisateur. La façon habituelle (mais pas seulement) de le faire est avec des cookies. Ce qui se passe, c'est que les données réelles restent sur votre serveur et sont liées à un identifiant de session unique. Ce numéro d'identification de session est placé sur un cookie et donné à l'utilisateur pour que vous puissiez ensuite consulter ses données à son retour.

Le processus ci-dessus est effectué automatiquement par PHP lorsque vous utilisez les fonctions de session; vous n'avez pas besoin de l'implémenter à la main. Si, pour une raison quelconque, vous devez modifier la manière dont les sessions sont implémentées, vous pouvez le faire en modifiant les paramètres de session dans php.ini.