Cookies vs sessions

197

J'ai commencé à utiliser PHP il y a quelques mois. Dans le but de créer un système de connexion pour mon site Web, j'ai pris connaissance des cookies et des sessions et de leurs différences (les cookies sont stockés dans le navigateur de l'utilisateur et les sessions sur le serveur). À ce moment-là, j'ai préféré les cookies (et qui n'aime pas les cookies?!) Et j'ai juste dit: "ça va? mon projet de diplôme de licence. Cependant, après avoir fait la majeure partie de mon application, j'ai entendu dire que pour le cas particulier de stockage de l'identifiant de l'utilisateur, les sessions sont plus appropriées. J'ai donc commencé à réfléchir à ce que je dirais si le jury me demandait pourquoi avez-vous utilisé des cookies au lieu de sessions? J'ai juste cette raison (que je n'ai pas besoin de stocker en interne des informations sur l'utilisateur).? ou c'est plus que ça?
Pourriez-vous me parler des avantages / inconvénients de l'utilisation de cookies pour conserver l'identifiant de l'utilisateur?

Merci pour vous tous dans StackOverflow!

Nadjib Mami
la source
2
Les deux méthodes stockent des données . Les cookies le font côté client, c'est-à-dire sur le stockage des appareils de vos visiteurs. Les sessions sont une «extension» intelligente en ce sens qu'elles ne stockent qu'un identifiant unique côté client et toutes les données réelles côté serveur. Lorsqu'ils reçoivent l'ID unique du cookie du client, ils savent quelles données charger sur le serveur. Dans la plupart des cas, des sessions seront ce dont vous avez besoin. En passant, vous pouvez gérer les deux avec github.com/delight-im/PHP-Cookie d'une manière plus moderne.
caw
En passant, WordPress core a abandonné l'utilisation des sessions il y a plusieurs années et utilise désormais uniquement des cookies . Intéressant. Je me demande s'ils ont fait cela pour faciliter le déploiement sur un ensemble de serveurs à charge équilibrée et / ou pour réduire les déconnexions aléatoires en raison de la collecte des déchets de session.
Simon East

Réponses:

237

Le concept stocke des données persistantes sur les chargements de pages pour un visiteur Web. Les cookies le stockent directement sur le client. Les sessions utilisent un cookie comme une sorte de clé, à associer aux données stockées côté serveur.

Il est préférable d'utiliser des sessions car les valeurs réelles sont masquées pour le client et vous contrôlez le moment où les données expirent et deviennent invalides. Si tout était basé sur des cookies, un utilisateur (ou un pirate informatique) pourrait manipuler ses données de cookies et ensuite lire des requêtes sur votre site.

Edit: Je ne pense pas qu'il y ait d'avantage à utiliser des cookies, autre que la simplicité. Regardez les choses de cette façon ... L'utilisateur a-t-il une raison de connaître son numéro d'identification? En règle générale, je dirais non, l'utilisateur n'a pas besoin de ces informations. La diffusion d'informations doit être limitée sur la base du besoin de savoir. Que faire si l'utilisateur change son cookie pour avoir un identifiant différent, comment votre application va-t-elle réagir? C'est un risque pour la sécurité.

Avant que les sessions ne fassent fureur, j'avais essentiellement ma propre implémentation. J'ai stocké une valeur de cookie unique sur le client et stocké mes données persistantes dans la base de données avec cette valeur de cookie. Ensuite, sur les demandes de page, j'ai fait correspondre ces valeurs et j'ai eu mes données persistantes sans laisser le client contrôler ce que c'était.

Fosco
la source
31
@JiminyCricket Je ne pense pas que ce soit vrai ... si tel est le cas, personne n'utiliserait des variables de session pour stocker l'utilisateur actuellement connecté - et tout le monde le fait. Ce serait un énorme risque pour la sécurité. À peu près sûr que l'ID de session est généralement stocké en tant que cookie sur l'ordinateur client, puis mis en correspondance côté serveur avec les données de session. Le serveur ne contrôle généralement pas les sessions via l'adresse IP, mais plutôt via une valeur de cookie.
John M.
1
Récemment, je viens de recommencer à utiliser uniquement des cookies, simplement parce que les sessions empêchent le chargement des pages s'il y en a une autre en cours d'exécution à partir de la même session, à moins que vous ne préfériez chaque page session_write_close();lorsque vous en avez besoin. Rouler votre propre identifiant unique et faire correspondre avec des cookies simples n'a pas été si difficile, et garde toutes les pages jolies et accrocheuses.
Brian Leishman
Pensez-vous que je devrais utiliser des sessions pour l'authentification? Y a-t-il des risques pour la sécurité? Que diriez-vous d'un hacker essayant de changer son identifiant de session, comment le serveur répondrait-il (supposons que l'identifiant de session deviné soit valide)?
O-BL
Utilisez session puis 2FA car la session peut être piratée.
Zakir Sajib le
121

Idées de base pour faire la distinction entre ces deux.

Session:

  1. L'IDU est stocké sur le serveur (c'est-à-dire côté serveur)
  2. Plus sûr (à cause de 1)
  3. L'expiration ne peut pas être définie, les variables de session expireront lorsque les utilisateurs ferment le navigateur. (de nos jours, il est stocké pendant 24 minutes par défaut en php)

Biscuits:

  1. L'IDU est stocké sur le navigateur Web (c'est-à-dire côté client)
  2. Pas très sûr, car les pirates peuvent atteindre et obtenir vos informations (à cause de 1)
  3. L'expiration peut être définie (voir setcookies () pour plus d'informations)

La session est préférable lorsque vous avez besoin de stocker des informations / valeurs à court terme, telles que des variables pour le calcul, la mesure, l'interrogation, etc.

Les cookies sont préférables lorsque vous avez besoin de stocker des informations / valeurs à long terme, telles que le compte de l'utilisateur (de sorte que même lorsqu'ils éteignent l'ordinateur pendant 2 jours, leur compte sera toujours connecté). Je ne peux pas penser à de nombreux exemples de cookies car ils ne sont pas adoptés dans la plupart des situations.

Reyske
la source
7
Attention: ce n'est PAS une bonne réponse. Cela commence assez bien mais confond les choses et se termine par de la désinformation. Ce n'est pas une explication de session vs cookies. C'est une explication de session vs session + cookie de session. Les cookies seuls ne sont pas préférés pour les raisons indiquées. Les sessions + les cookies de session sont préférés pour les raisons indiquées.
markus
Une autre erreur est que vous avez une influence sur la durée de vie de la session via la configuration PHP.
markus
1
Les sessions définissent toujours un cookie sur le navigateur de l'utilisateur, donc cette explication côté serveur-client n'est pas précise
Zalaboza
l'expiration des sessions peut être définie facilement par n'importe quelle application. Le troisième point est faux. De plus, vous avez oublié la quantité de données qui peuvent être stockées dans le cookie vs session. C'est un point plus important
saran3h
2
Que signifie IDU?
Simon East
45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

C'est la différence majeure dans votre choix,

Si vous voulez que l'identifiant soit mémorisé pendant longtemps, vous devez utiliser des cookies; sinon, si vous voulez simplement que le site Web reconnaisse l'utilisateur uniquement pour cette visite, les sessions sont la voie à suivre.

Les sessions sont stockées dans un fichier que votre serveur php générera. Pour se rappeler quel fichier est pour quel utilisateur, php placera également un cookie sur le navigateur de l'utilisateur qui contient cet identifiant de fichier de session afin que lors de leur prochaine visite, php lira ce fichier et rechargera la session.

Maintenant, php efface par défaut les sessions à chaque intervalle, et la convention de dénomination de la session la fait expirer automatiquement. De plus, les navigateurs ne conserveront pas le cookie contenant l'identifiant de session une fois que le navigateur est fermé ou que l'historique est effacé.

Il est important de noter que de nos jours, les navigateurs prennent également en charge un autre type de moteurs de stockage tels que LocalStorage, SessionStorage et d'autres moteurs Webdb que le code javascript peut utiliser pour enregistrer des données sur votre ordinateur afin de se souvenir de vous. Si vous ouvrez la console javascript dans Facebook, par exemple, et tapez "localStorage", vous verrez toutes les variables que Facebook utilise pour se souvenir de vous sans cookies.

Zalaboza
la source
16
En fait, par défaut, une session dure jusqu'à ce que l'utilisateur ferme son navigateur, MAIS cela peut être changé dans le fichier php.ini en changeant le 0 dans session.cookie_lifetime = 0 pour être le nombre de secondes que vous voulez que la session dure, ou en en utilisant session_set_cookie_params ().
DOK
1
D'autres informations utiles, telles questions qui obtiennent de nombreuses réponses .. super, merci encore DOK!
Nadjib Mami le
1
Gardez également à l'esprit le point de rupture unique que les fichiers de session peuvent créer. Lorsque même la plus petite attaque de style dos se produit via un proxy, un commutateur d'IP ou des zombies, un fichier de session est créé sur le disque dur de votre serveur ou SSD. Si vous ne pouvez pas suivre la lecture des écritures, votre site tombera en panne.
Shawn E Carter
quelqu'un peut-il clafiry: "LES SESSIONS SE TERMINENT LORSQUE L'UTILISATEUR FERME SON NAVIGATEUR" 1. Que faire si l'utilisateur navigue awya à partir de la page .. puis revient sans fermer le navigateur. 2. Que faire s'ils ont plusieurs fenêtres / onglets de navigateur ouverts pointant vers le même site? certaines applications Web au travail sont confuses dans cette situation, mais je ne sais pas quel type de cookies elles utilisent.
jcansell
1
@jcansell bien, un cookie ne sera pas confondu par plusieurs onglets ou par la navigation, dans ce cas, ces applications Web utilisaient très probablement le stockage local / le stockage de session pour enregistrer les données en utilisant javascript
Zalaboza
22

Réponse courte

Règles classées par priorité:

  • Règle 1. Ne faites jamais confiance à l'entrée utilisateur: les cookies ne sont pas sûrs. Utilisez des sessions pour les données sensibles.
  • Règle 2. Si des données persistantes doivent rester lorsque l'utilisateur ferme le navigateur, utilisez des cookies.
  • Règle 3. Si les données persistantes ne doivent pas rester lorsque l'utilisateur ferme le navigateur, utilisez des sessions.
  • Règle 4. Lisez la réponse détaillée!

Source: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Réponse détaillée

Biscuits

  • Les cookies sont stockés côté client (dans le navigateur du visiteur).
  • Les cookies ne sont pas sûrs: il est assez facile de lire et d'écrire le contenu des cookies.
  • Lorsque vous utilisez des cookies, vous devez informer les visiteurs conformément aux lois européennes (GDPR).
  • L'expiration peut être définie, mais l'utilisateur ou le navigateur peut la modifier.
  • Les utilisateurs (ou navigateur) peuvent (être configurés pour) refuser l'utilisation des cookies.

Séances

  • Les sessions sont stockées côté serveur.
  • Les sessions utilisent des cookies (voir ci-dessous).
  • Les sessions sont plus sûres que les cookies, mais pas invulnérables.
  • L'expiration est définie dans la configuration du serveur (php.ini par exemple).
  • Le délai d'expiration par défaut est de 24 minutes ou lorsque le navigateur est fermé.
  • L'expiration est réinitialisée lorsque l'utilisateur actualise ou charge une nouvelle page.
  • Les utilisateurs (ou navigateur) peuvent (être paramétrés pour) refuser l'utilisation de cookies, donc de sessions.
  • Légalement, vous devez également informer les visiteurs du cookie, mais l'absence de précédent n'est pas encore claire.

Le choix approprié

Les sessions utilisent un cookie! Les données de session sont stockées côté serveur, mais un UID est stocké côté client dans un cookie. Il permet au serveur de faire correspondre un utilisateur donné avec les bonnes données de session. L'UID est protégé et difficile à pirater, mais pas invulnérable. Pour les actions sensibles (changement d'email ou réinitialisation du mot de passe), ne vous fiez pas aux sessions ni aux cookies: demandez le mot de passe de l'utilisateur pour confirmer l'action.

Les données sensibles ne doivent jamais être stockées dans des cookies (e-mails, mots de passe cryptés, données personnelles ...). Gardez à l'esprit que les données sont stockées sur un ordinateur étranger et si l'ordinateur n'est pas privé (salle de classe ou ordinateurs publics), quelqu'un d'autre peut potentiellement lire le contenu des cookies.

Les données Remember-me doivent être stockées dans des cookies, sinon les données seront perdues lorsque l'utilisateur ferme le navigateur. Cependant, ne sauvegardez pas le mot de passe ou les données personnelles de l'utilisateur dans le cookie «Remember-me». Stockez les données utilisateur dans la base de données et associez ces données à une paire cryptée d'identifiant / clé stockée dans un cookie.

Après avoir pris en compte les recommandations précédentes, la question suivante est enfin ce qui vous aide à choisir entre les cookies et les sessions:

Les données persistantes doivent-elles rester lorsque l'utilisateur ferme le navigateur?

  • Si la réponse est oui , utilisez des cookies .
  • Si la réponse est non , utilisez des sessions .
Fifi
la source
20

lorsque vous enregistrez le #ID en tant que cookie pour reconnaître les utilisateurs connectés, vous montrez en fait aux utilisateurs des données qui ne leur sont pas liées. De plus, si un tiers essaie de définir des identifiants aléatoires comme données de cookie dans son navigateur, il pourra convaincre le serveur qu'il est un utilisateur alors qu'il ne l'est pas. C'est un manque de sécurité.

Vous avez utilisé des cookies et, comme vous l'avez dit, vous avez déjà terminé la majeure partie du projet. outre cookie a le privilège de rester longtemps, tandis que les sessions se terminent plus rapidement. Les sessions ne conviennent donc pas dans ce cas. En réalité, de nombreux sites Web et services célèbres et populaires utilisent des cookies et vous pouvez rester connecté pendant une longue période. Mais comment pouvez-vous utiliser leur méthode pour créer un processus de connexion plus sûr?

voici l'idée: vous pouvez aider la manière dont vous utilisez les cookies: si vous utilisez des clés aléatoires au lieu d'identifiants pour reconnaître les utilisateurs connectés, premièrement, vous ne divulguez pas vos données primaires à des utilisateurs aléatoires, et deuxièmement, si vous considérez le hasard clé assez grande, il sera plus difficile pour quiconque de deviner une clé ou d'en créer une au hasard. par exemple, vous pouvez enregistrer une clé de 40 longueurs comme celle-ci dans le navigateur de l'utilisateur: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" et il sera moins probable pour quiconque de créer la clé exacte et de se faire passer pour quelqu'un d'autre.

Makan Tayebi
la source
1
Belle explication. J'utilise GUID dans le jeton pour reconnaître les utilisateurs individuels.
Karthik
13

En fait, la session et les cookies ne sont pas toujours des choses séparées. Souvent, mais pas toujours, session utilise des cookies.

Il y a quelques bonnes réponses à votre question dans ces autres questions ici. Étant donné que votre question porte spécifiquement sur l'enregistrement de l'IDU (ou de l'ID) de l'utilisateur, je ne pense pas que ce soit tout à fait un double de ces autres questions, mais leurs réponses devraient vous aider.

cookies vs session

Cache VS Session VS cookies?

Quelle est la différence entre une session et un cookie?

DOK
la source
10

J'utilise personnellement les cookies et la session.

Cookies utilisés uniquement lorsque l'utilisateur clique sur la case à cocher "se souvenir de moi" . et les cookies sont également cryptés et les données ne sont décryptées que sur le serveur. Si quelqu'un essaie de modifier les cookies, notre décrypteur est capable de le détecter et de refuser la demande.

J'ai vu tellement de sites où les informations de connexion sont stockées dans des cookies , tout le monde peut simplement changer l'identifiant et le nom d'utilisateur de l'utilisateur dans les cookies pour accéder à n'importe quel compte.

Merci,

Muhammad Sanaullah
la source
2

La session et le cookie ne sont pas identiques.

Une session est utilisée pour stocker les informations des pages Web. Normalement, les pages Web n'ont pas de mémoire pour stocker ces informations. Mais en utilisant, nous pouvons enregistrer les informations nécessaires.

Mais Cookie est utilisé pour identifier les utilisateurs. En utilisant des cookies, nous pouvons stocker les données. C'est une petite partie des données qui sera stockée dans le navigateur Web de l'utilisateur. Ainsi, chaque fois que l'utilisateur navigue la prochaine fois, le navigateur renvoie les informations de données de cookie au serveur pour obtenir les activités précédentes.

Crédits: Session et Cookie

user3824494
la source
Et si l'utilisateur désactivait les cookies? Comment les cookies identifient-ils l'utilisateur?
SohailRajput
2

TL; DR

+--------------------------------------------------+---------------------------------+------------------------------------------------------------+
| Criteria / factors                               | Sessions                        | Cookies                                                    |
+--------------------------------------------------+---------------------------------+------------------------------------------------------------+
| Epoch (start of existence)                       | Created BEFORE an HTTP response | Created AFTER an HTTP response                             |
| Availability during the first HTTP request       | YES                             | NO                                                         |
| Availability during the succeeding HTTP requests | YES                             | YES                                                        |
| Ultimate control for the data and expiration     | Server administrator            | End-user                                                   |
| Default expiration                               | Expires earlier than cookies    | Lasts longer than sessions                                 |
| Server costs                                     | Memory                          | Memory                                                     |
| Network costs                                    | None                            | Unnecessary extra bits                                     | 
| Browser costs                                    | None                            | Memory                                                     |
| Security                                         | Difficult to hijack             | Easy to hijack                                             |
| Deprecation                                      | None                            | Now discouraged in favor of the JavaScript "Web Storage"   |
+--------------------------------------------------+---------------------------------+------------------------------------------------------------+

Détails

Les avantages et les inconvénients sont subjectifs. Ils peuvent entraîner une dichotomie (un avantage pour certains, mais considéré comme un inconvénient pour d'autres). Au lieu de cela, j'ai exposé ci-dessus les facteurs qui peuvent vous aider à décider lequel choisir.

Existence lors de la première requête et réponse HTTP

Disons simplement que vous êtes une personne côté serveur qui souhaite traiter à la fois la session et le cookie. La première poignée de main HTTP se déroulera comme suit:

  1. Le navigateur prépare la requête HTTP - SESSIONS: non disponible ; COOKIES: non disponible
  2. Le navigateur envoie la requête HTTP
  3. Le serveur reçoit la requête HTTP
  4. Le serveur traite la requête HTTP - SESSIONS: existait ; COOKIES: cast
  5. Le serveur envoie la réponse HTTP
  6. Le navigateur reçoit la réponse HTTP
  7. Le navigateur traite la réponse HTTP - SESSIONS: non disponible ; COOKIES: existaient

À l'étape 1, le navigateur n'a aucune idée du contenu des sessions et des cookies. À l'étape 4, le serveur peut avoir la possibilité de définir les valeurs de la session et des cookies.

Disponibilité pendant les requêtes et réponses HTTP suivantes

  1. Le navigateur prépare la requête HTTP - SESSIONS: non disponible ; COOKIES: disponibles
  2. Le navigateur envoie la requête HTTP
  3. Le serveur reçoit la requête HTTP
  4. Le serveur traite la requête HTTP - SESSIONS: disponible ; COOKIES: disponibles
  5. Le serveur envoie la réponse HTTP
  6. Le navigateur reçoit la réponse HTTP
  7. Le navigateur traite la réponse HTTP - SESSIONS: non disponible ; COOKIES: disponibles

Charge utile

Disons que dans une seule page Web, vous chargez 20 ressources hébergées example.com, ces 20 ressources contiendront des informations supplémentaires sur les cookies. Même s'il ne s'agit que d'une demande de ressource pour CSS ou une image JPG, il contiendrait toujours des cookies dans leurs en-têtes sur le chemin du serveur. Une requête HTTP à une ressource JPG doit-elle contenir un tas de cookies inutiles?

Désapprobation

Il n'y a pas de remplacement pour les sessions. Cependant, il existe de nombreuses autres options pour stocker des données dans le navigateur plutôt que les cookies de la vieille école .

Stockage des données utilisateur

La session est plus sûre pour le stockage des données utilisateur car elle ne peut pas être modifiée par l'utilisateur final et ne peut être définie que côté serveur. Les cookies, quant à eux, peuvent être détournés car ils sont simplement stockés sur le navigateur.

Abel Callejo
la source
1

Les sessions vous permettent de stocker des informations individuelles comme avec les cookies, mais les données sont stockées sur le serveur au lieu du client.


la source
0

Comme d'autres l'ont dit, les sessions sont intelligentes et ont plus l'avantage de cacher les informations au client.

Mais Cookie a toujours au moins un avantage , vous pouvez accéder à vos cookies à partir de Javascript (par exemple ngCookies ). Avec la session PHP, vous ne pouvez pas y accéder en dehors du script PHP.

Kamalakannan J
la source
1
Vous pouvez ... Pas directement bien sûr, si vous pouvez y accéder via une requête ajax au script qui renvoie les données de session. Mais je ne suis pas sûr que vous devriez.
l00k le
0

Je vais sélectionner Session, tout d'abord la session est plus sécurisée que les cookies, les cookies sont les données du site client et la session est les données du site serveur. Les cookies sont utilisés pour identifier un utilisateur, car ce sont de petits morceaux de code qui sont intégrés à mon serveur avec le navigateur de l'ordinateur de l'utilisateur. D'autre part, Session vous aide à sécuriser votre identité car le serveur Web ne sait pas qui vous êtes car l'adresse HTTP change l'état 192.168.0.1 en 765487cf34ert8ded… ..ou autre chose avec l'aide des méthodes GET et POST. La session stocke les données de l'utilisateur dans une session d'ID unique que même l'ID d'utilisateur ne peut pas correspondre. Session stocke les informations d'un seul utilisateur dans toutes les pages d'une application. L'expiration des cookies est définie à l'aide de setcookies (), tandis que l'expiration de la session n'est pas définie, elle expire lorsque l'utilisateur éteint les navigateurs.

Wasiq Mahmood WM
la source
0

Une session est un groupe d'informations sur le serveur associé aux informations du cookie. Si vous utilisez PHP, vous pouvez vérifier la session. enregistrer l'emplacement du chemin _ et "voir les sessions". Un cookie est un extrait de données envoyées et renvoyées par les clients. Les cookies sont souvent utilisés pour faciliter les sessions car ils indiquent au serveur quel client a géré quelle session. Il existe d'autres moyens de le faire (magie des chaînes de requête, etc.) mais les cookies sont probablement les plus courants pour cela.

Megersa
la source
0

Les cookies et les sessions sont utilisés pour stocker des informations. Les cookies ne sont stockés que sur la machine côté client, tandis que les sessions sont stockées sur le client ainsi que sur un serveur.

Session

Une session crée un fichier dans un répertoire temporaire sur le serveur où les variables de session enregistrées et leurs valeurs sont stockées. Ces données seront disponibles sur toutes les pages du site lors de cette visite.

Une session se termine lorsque l'utilisateur ferme le navigateur ou après avoir quitté le site, le serveur mettra fin à la session après une période de temps prédéterminée, généralement 30 minutes.

Biscuits

Les cookies sont des fichiers texte stockés sur l'ordinateur client et ils sont conservés à des fins de suivi d'utilisation. Le script serveur envoie un ensemble de cookies au navigateur. Par exemple, le nom, l'âge ou le numéro d'identification, etc. Le navigateur stocke ces informations sur une machine locale pour une utilisation future.

Lorsque la prochaine fois que le navigateur envoie une demande au serveur Web, il envoie ces informations sur les cookies au serveur et le serveur utilise ces informations pour identifier l'utilisateur.

Jay-R Joseph Gabunada
la source