Maison  >  Article  >  développement back-end  >  Une astuce pour résoudre les notes PHP5 (COOKIE et SESSION) (partager)

Une astuce pour résoudre les notes PHP5 (COOKIE et SESSION) (partager)

慕斯
慕斯avant
2021-06-09 09:43:582333parcourir

Cet article partagera avec vous une solution aux notes PHP5 (COOKIE et SESSION) (partage). L'application a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Une astuce pour résoudre les notes PHP5 (COOKIE et SESSION) (partager)

1. Le protocole HTTP lui-même est apatride.
Nous comptons tous sur le protocole HTTP pour transmettre des informations lorsque nous surfons sur Internet. Par exemple, si nous tapons l'URL www.bokee.com dans le navigateur et appuyons sur Entrée, vous constaterez que l'URL deviendra : http://www.bokee.com La raison est que la page Web que vous parcourez est. basé sur le protocole http. Le protocole http ne peut pas enregistrer les sites Web que l'utilisateur visite souvent, ses passe-temps, ni le compte d'identification et le mot de passe de l'utilisateur. C'est ce qu'on appelle l'apatridie du protocole HTTP. Le protocole HTTP lui-même est sans état, ce qui est conforme à l'objectif initial du protocole HTTP. Le client n'a qu'à demander au serveur de télécharger certains fichiers. Ni le client ni le serveur n'ont besoin d'enregistrer les actions passées de chacun à chaque fois. les demandes sont toutes indépendantes, tout comme la relation entre un client et un distributeur automatique ou un hypermarché ordinaire (non adhérent). Si vous les reconnaissez, ils ne vous reconnaîtront certainement pas.

2. Comment comprendre le cookie et la session ?
Les cookies et les sessions étant étroitement liés, nous les présenterons ensemble ici.
Par exemple : lorsque j'étais dans le Henan, j'allais souvent dans une épicerie fine pour acheter des canards gloutons. Afin de promouvoir les ventes, le propriétaire du magasin a lancé une promotion spéciale : « tous les 10 canards achetés seront offerts gratuitement. ". À part les mariages et les enterrements à la maison, personne n'achèterait 10 canards rôtis à la fois, n'est-ce pas ? Le patron doit donc réfléchir à un moyen d'enregistrer la consommation du client. Il y a ici trois options :
Ⅰ Le patron se souvient de la quantité consommée par chaque client, et en donne automatiquement une au client lorsque le client consomme 10 pièces. C'est comme si le protocole HTTP lui-même était avec état et pouvait mémoriser le comportement d'activité du client. Mais malheureusement, pour diverses raisons, le protocole http lui-même ne peut pas être avec état, et le patron lui-même ne dispose pas d'une mémoire aussi extraordinaire, donc cette solution ne fonctionne pas !
Ⅱ. Le patron délivre une carte à points au client, qui enregistre le montant de sa consommation et a généralement une date d'expiration. Chaque fois qu'il achète du canard rôti, si le client présente cette carte, le patron saura que le client a déjà visité le magasin. Cette approche consiste à maintenir l'état côté client, comme la technologie des cookies. Ouvrez (Système Windows) C:Documents and Settings Username Cookies, vous trouverez quelques petits fichiers au format *.txt, qui sont les « cartes de points » (cookies) qui vous sont envoyées par certains sites Web lorsque vous les naviguez.
Ⅲ. Le patron délivre une carte de membre au client et n'enregistre aucune information à l'exception du numéro de carte. A chaque fois lors d'un achat de canard rôti, si le client présente la carte, le patron sortira de la liste du magasin, retrouvera votre carte. numéro et ajouter 1 point. Cette approche consiste à maintenir l’état côté serveur.
C’est comme la technologie de session.
La plus grande différence entre cookie et session est la suivante : le cookie est une carte de récompense envoyée au client, qui enregistre toutes les informations de consommation du client. Session émet une carte de points avec uniquement le numéro de carte (ID de session) au client et enregistre toutes les informations de consommation du client. Les cookies sont enregistrés côté client ; les sessions sont enregistrées côté serveur et les identifiants de session sont enregistrés côté client. Il s'agit généralement également d'un petit fichier cookie, car ce petit fichier ne contient rien d'autre que l'identifiant de session (comme une carte). numéro), c’est mieux qu’un cookie. Beaucoup plus sûr.

3. A quoi servent les cookies et les sessions ?
L'utilisation courante, comme le téléchargement d'éléments à partir de certains sites Web, nécessite que les membres se connectent d'abord. Le protocole http lui-même est sans état et il n'y a aucun moyen de savoir si le client s'est connecté. Que dois-je faire ? Vous pouvez le savoir grâce aux cookies et aux sessions. Un autre exemple est celui des achats en ligne. Comment le panier sait-il quels produits le client a sélectionnés ? Des cookies et des sessions peuvent également être enregistrés. Dans l’ensemble, les cookies et les sessions sont des technologies qui peuvent enregistrer le statut des clients. Bien qu’il s’agisse de technologies différentes, tant que les cookies peuvent le faire, les sessions peuvent le faire aussi !


COOKIE

1. Qu'est-ce qu'un cookie ?
La technologie 0Cookie est une technologie très controversée Depuis sa naissance, elle est devenue un sujet de débat pour la majorité des utilisateurs du réseau et des développeurs web. Certains internautes, y compris certains experts du Web chevronnés, ne sont pas satisfaits de sa création et de sa promotion. Ce n'est pas parce que la fonctionnalité de la technologie des cookies est trop faible ou pour d'autres raisons de performances techniques, mais simplement parce qu'ils estiment que l'utilisation des cookies cause un préjudice. à la vie privée des utilisateurs du réseau. Étant donné que les cookies sont de petits fichiers texte enregistrés sur le navigateur de l'utilisateur par le serveur Web, ils contiennent des informations sur l'utilisateur (telles que le numéro d'identification, le mot de passe, la manière dont l'utilisateur achète sur le site Web ou le nombre de fois qu'il visite le site). .
Alors, qu’est-ce que la technologie Cookie exactement ? Cela porte-t-il réellement atteinte à la vie privée des internautes ? Lisons le contenu suivant avant de répondre.
Dans l’histoire du développement des technologies WEB, l’émergence de la technologie Cookie constitue un changement majeur. Tout d'abord, Netscape a introduit la technologie Cookie dans son navigateur Netscape Navigator. Depuis lors, la World Wide Web Association a commencé à prendre en charge la norme Cookie. Plus tard, il a été vigoureusement promu par Microsoft (car la technologie ASP utilisée par le serveur Web IIS de Microsoft utilise largement la technologie Cookie), c'est-à-dire dans Internet Le navigateur Explorer prend entièrement en charge la technologie Cookie. Jusqu’à présent, la grande majorité des navigateurs prennent en charge la technologie Cookie, ou sont du moins compatibles avec l’utilisation de la technologie Cookie. Selon la définition dans la documentation officielle de Netscape, les cookies sont un moyen pour les serveurs ou les scripts de conserver des informations sur les postes clients sous le protocole HTTP. Les cookies sont de petits fichiers enregistrés sur le navigateur de l'utilisateur par le serveur Web, qui peuvent contenir des informations sur l'utilisateur (telles que le numéro d'identification, le mot de passe, la manière dont l'utilisateur achète sur le site Web ou le nombre de fois que l'utilisateur visite le site). Chaque fois qu'un utilisateur se connecte au serveur, le site Web peut accéder aux informations des cookies.
Si vous utilisez un système Windows, veuillez ouvrir C:Documents and Settings nom d'utilisateur Cookies, vous constaterez qu'il existe de nombreux petits fichiers au format *.txt dans ce répertoire. C'est le fichier cookie. Bien entendu, il se peut que vous ne trouviez rien dans ce répertoire parce que vous venez d'installer le système, que vous n'avez jamais navigué sur Internet ou que votre navigateur a désactivé les cookies. Sinon, il y aura toujours quelque chose dans ce répertoire.
En termes simples, les navigateurs utilisent un ou plusieurs fichiers limités pour prendre en charge les cookies. Ces fichiers sont appelés fichiers cookies sur les machines utilisant les systèmes d'exploitation Windows et fichiers cookies magiques sur les machines Macintosh. Ces fichiers sont utilisés par les sites Web pour y stocker des données de cookies. Les sites Web peuvent insérer des informations dans ces fichiers cookies, ce qui peut avoir des effets secondaires pour certains utilisateurs Internet. Certains utilisateurs pensent que cela provoque une atteinte à la vie privée. Pire encore, d'autres pensent que les cookies constituent une atteinte à l'espace personnel et peuvent présenter des risques pour la sécurité des ordinateurs des utilisateurs.
Actuellement, certains cookies sont temporaires et d'autres sont persistants. Les cookies temporaires ne sont enregistrés sur le navigateur que pendant une période de temps spécifiée. Une fois la période spécifiée expirée, le cookie sera effacé par le système. Par exemple, dans
PHP Le cookie est utilisé pour suivre la progression de l'utilisateur jusqu'à ce que l'utilisateur quitte le site Web. Un cookie persistant est enregistré dans le fichier cookie de l'utilisateur et peut toujours être appelé au prochain retour de l'utilisateur. Enregistrer les cookies dans les fichiers Cookies. Certains utilisateurs penseront trop que cela posera de gros problèmes. La raison principale est que certains utilisateurs craignent que les cookies ne suivent leurs habitudes de navigation en ligne, par exemple les types de sites que les utilisateurs aiment visiter et les activités auxquelles ils aiment participer. Je crains qu'une fois que ce type d'informations personnelles tombe entre les mains de certaines personnes ayant des arrière-pensées, l'individu puisse devenir la cible de nombreuses publicités inutiles, voire subir des dommages inattendus. Cependant, cette inquiétude ne se produira pas du tout, car les utilisateurs extérieurs au site Web ne peuvent pas obtenir d'informations sur les cookies sur le site Web. Il est donc impossible d'utiliser des cookies à cette fin. Cependant, en raison des malentendus de certains utilisateurs et de « fausses rumeurs », certains développeurs de navigateurs n'ont d'autre choix que de réagir de manière appropriée (par exemple, Netscape Navigator 4.0 et Internet Explorer 3.0 offrent tous deux la possibilité de bloquer les cookies). Personnellement, je pense qu'il n'y a pas de fumée sans feu. Si les programmeurs de sites Web ne réfléchissent pas de manière rigoureuse, les cookies présentent certains problèmes de sécurité. Cependant, ces failles ne suffisent pas à masquer les excellentes qualités des cookies. utilisez-les.
Le résultat d’une si longue attente pour la technologie Cookie a contraint de nombreux développeurs de navigateurs à fournir un contrôle flexible sur les Cookies dans leurs navigateurs. Par exemple, les deux navigateurs grand public actuels Netscape Navigator et Internet Explorer gèrent les cookies de cette manière : Netscape Navigator 4.0 peut non seulement accepter les cookies pour avertissement, mais également bloquer les cookies ; Internet Explorer 3.0 peut également bloquer les cookies, mais dans Internet Explorer 4 In . 0, vous pouvez uniquement accepter les avertissements sans proposer d'options de blocage. Cependant, dans les versions mises à jour après Internet Explorer 4.0, l'option de blocage des cookies a été ajoutée.
De plus, bon nombre des technologies les plus récentes peuvent même bloquer les cookies sur les navigateurs qui ne peuvent pas bloquer les cookies. Par exemple, vous pouvez limiter l'utilisation des cookies en définissant différents types de fichiers de cookies. Malheureusement, si vous souhaitez bloquer complètement les cookies, vous rejetterez certainement de nombreuses pages du site. Parce qu'aujourd'hui, de nombreux développeurs de sites Web sont tombés amoureux des puissantes fonctions de la technologie des cookies. Par exemple, l'utilisation des objets Session ne peut être séparée de la prise en charge des cookies.


2. Comment fonctionne le Cookie ?
Lorsqu'un client visite un site Web basé sur la technologie PHP, vous pouvez utiliser la fonction setcookie en PHP pour générer un cookie. Après traitement, le système envoie le cookie au client et l'enregistre dans C:Documents and Settings. Répertoire des cookies du nom d’utilisateur. Les cookies font partie des en-têtes HTTP, la fonction setcookie doit donc être appelée avant que quoi que ce soit ne soit envoyé au navigateur. Cette restriction est la même que la fonction header() (si vous avez besoin de comprendre la fonction head(), veuillez la vérifier vous-même). Lorsque le client visite à nouveau le site Web, le navigateur enverra automatiquement le cookie correspondant au site dans le répertoire Cookies du nom d'utilisateur C:Documents and Settings au serveur, et le serveur convertira automatiquement le cookie transmis par le client en une variable PHP. En PHP5, les cookies envoyés par le client seront convertis en variables globales. Vous pouvez le lire via $_COOKIE['xxx'].

Même s'il existe encore aujourd'hui certains internautes qui se disputent encore à propos des Cookies, la grande majorité des internautes a encore tendance à accepter les Cookies. Nous pouvons donc utiliser en toute sécurité la technologie Cookie pour développer nos pages WEB.

3. Fonctions communes des cookies
● La fonction SetCookie crée un Cookie et l'ajoute à la fin de l'en-tête HTTP. Une chose à noter est que les cookies font partie de l'en-tête du protocole HTTP et sont utilisés pour transférer des informations entre le navigateur et le serveur, ils doivent donc être appelés avant tout contenu appartenant au HTML le fichier lui-même est généré. Fonction SetCookie, même s'il y a des espaces ou des lignes vides avant d'appeler cette fonction, cela ne fonctionnera pas. Si setCookie() reconnaît le deuxième élément, aucun élément n'ose reconnaître le premier élément. La condition préalable à l'utilisation de la fonction setcookie() est que le navigateur du client prenne en charge les cookies. Si le client le désactive, setcookie() sera inutile.
int SetCookie(string name, string value, int expire, string path, string domain, int secure, bool httponly);
Description du paramètre :
name ;
valeur ; Définissez la valeur du cookie.
expire ; Définir le délai d’expiration des cookies. Si vous souhaitez enregistrer le cookie en tant que processus de navigation, il deviendra invalide après la fermeture du navigateur. Ensuite, vous pouvez directement définir le délai d'expiration sur 0. Par exemple :setcookie("nom","valeur",0). Si ce paramètre n'est pas défini, la fermeture du navigateur peut également mettre fin à un cookie.
chemin : représente le répertoire sur le serveur web, qui est par défaut le répertoire où se trouve la page appelée. Il y a un autre point à noter ici. Par exemple, votre site dispose de plusieurs répertoires différents (comme un répertoire commercial, un. Annuaire Forum ), alors si vous utilisez uniquement des cookies sans chemin, les cookies déposés dans une page d'un annuaire ne pourront pas être vus dans une page d'un autre annuaire. est orienté vers le chemin. En effet, même si le chemin n'est pas précisé, le serveur WEB transmettra automatiquement le chemin actuel au navigateur, et préciser le chemin obligera le serveur à utiliser le chemin défini. La façon de résoudre ce problème est d'ajouter le chemin et le nom de domaine lors de l'appel de SetCookie. Le format du nom de domaine peut être "http://www.phpuser.com/" ou ".phpuser.com". La partie représentant la valeur dans la fonction SetCookie sera automatiquement codée une fois passée. En d'autres termes, si la valeur de value est "test valeur", elle deviendra "test" une fois passée %. 20value", la même méthode que l'URL. Bien entendu, cela est transparent pour le programme car PHP décode automatiquement la valeur du cookie lorsqu'il la reçoit.

Domaine : Le nom de domaine que le cookie peut utiliser. La valeur par défaut est le nom de domaine de la page appelée. Le nom de domaine doit contenir deux ".", donc si vous spécifiez votre nom de domaine de premier niveau, vous devez utiliser ".mydomain.com". Après avoir défini un nom de domaine, le nom de domaine doit être utilisé pour accéder au site Web pour que le cookie soit valide. Si vous utilisez plusieurs noms de domaine pour accéder à cette page, alors ce champ peut être vide ou les noms de domaine accédant à ce cookie appartiennent tous au même domaine.
sécurisé : S'il est défini sur "1", cela signifie que le cookie ne peut être mémorisé que par les serveurs que le navigateur de l'utilisateur considère comme sécurisés.
Tous les paramètres sauf le nom sont facultatifs. Les trois paramètres value, path et domain peuvent être remplacés par la chaîne vide "", indiquant qu'il n'y a aucun paramètre ; les paramètres expire et secure sont numériques et peuvent être représentés par 0. Le paramètre expire est un horodatage Unix standard, qui peut être obtenu à l'aide de la fonction time() ou mktime(), en secondes. Le paramètre secure indique si ce cookie est transmis sur le réseau via le protocole HTTPS crypté.
httponly : S'il est défini sur 1, cela signifie que le cookie ne peut être utilisé que par le protocole http. Tout langage de script, tel que javascript, ne peut pas obtenir le cookie créé par PHP, ce qui affaiblit efficacement l'attaque de XSS. (Remarque : il s'agit d'une option uniquement disponible en PHP5 et je ne l'ai jamais utilisée. J'ai lu le manuel officiel et essayé de traduire en . Si vous avez des questions, veuillez vous référer au manuel officiel.)
Le cookie actuellement défini ne prend pas effet immédiatement, mais ne sera visible que sur la page suivante ou lors de l'actualisation. En effet, le cookie est transmis du serveur au navigateur du client dans la page définie et. sera affiché sur la page suivante ou après actualisation. La raison pour laquelle le serveur peut retirer le cookie de la machine du client et le renvoyer au serveur.

Vigne

Un étudiant allemand de 16 ans a piraté Hotmail grâce aux cookies
Adriaan Graas, un étudiant allemand de 16 ans, s'intéresse beaucoup à la sécurité des réseaux et au développement Web. Il a également découvert un moyen de pirater Hotmail. Aujourd'hui, plus d'une semaine plus tard, Microsoft n'a pas encore corrigé la vulnérabilité.
L'idée de ce petit hacker est très simple. Lorsqu'un utilisateur se connecte à Hotmail, le système génère un cookie pour faciliter la prochaine connexion. Étant donné que le cookie n'est pas lié à une adresse IP, les pirates peuvent simuler ces cookies et les utiliser pour se connecter, sans même connaître le mot de passe ni même l'adresse e-mail de la victime. Grâce à XSS, les pirates peuvent insérer un morceau de code javascript et utiliser un script de journal pour envoyer des cookies à un serveur Web. Le script peut être écrit en PHP, ASP, CGI et d'autres langages.

Cas d'application d'un cookie :
●Créer un cookie :
SetCookie()
●Créer un tableau de cookies :
Un :
SetCookie(" CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");
Deuxième :
SetCookie("CookieArray[0]", "Value 1" ) ;
SetCookie("CookieArray[1]", "Value 2");
● Réception et traitement des cookies

PHP prend en charge très bien la réception et le traitement des cookies et est entièrement automatique. même principe que les variables GET et POST, très simple.
Par exemple, si vous paramétrez un cookie nommé MyCookier, PHP l'analysera automatiquement à partir de l'entête HTTP reçu par le serveur WEB et formera une variable globale directement utilisable nommée $_COOKIE['MyCookie']. valeur du cookie. La même chose s'applique aux tableaux.
Les exemples sont les suivants : (en supposant qu'ils ont été définis dans les pages précédentes et sont toujours valides)
echo $_COOKIE['MyCookie'];
Exemple de suppression d'un tableau de cookies :

// 创建一个cookie数组
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");
// 页面刷新之后,用foreach提取cookie数组。
if (isset($_COOKIE['cookie'])) {
   foreach ($_COOKIE['cookie'] as $name => $value) {
       echo "$name : $value <br />\n";
   }
}

C'est aussi simple que ça.
Supprimer le cookie
Pour supprimer un cookie existant, il existe deux manières :
1. Appelez SetCookie avec uniquement le paramètre name, puis le cookie nommé ce nom sera supprimé du fichier associé. ordinateur ;
setcookie("MonCookie"); //Supprimer MonCookie.
2. Définissez le délai d'expiration du cookie sur time() ou time()-1//Peu importe combien de temps() est réduit, tant que c'est le délai d'expiration//, alors ce cookie sera expire après avoir parcouru cette page. Il a été supprimé (en fait, il est devenu invalide). Par exemple :
setcookie("MyCookie","Value",time()-1); //Supprimer MyCookie.
Il est à noter que lorsqu'un cookie est supprimé, sa valeur est toujours valable sur la page en cours.
Si vous souhaitez enregistrer le cookie en tant que processus de navigateur, il deviendra invalide après la fermeture du navigateur. Ensuite, vous pouvez directement définir le délai d'expiration sur 0. Par exemple : setcookie("nom","valeur",0). Si ce paramètre n'est pas défini, la fermeture du navigateur peut également mettre fin à un cookie.

Notes sur les cookies
1. Il ne peut y avoir de sortie HTML avant que SetCookie() ne reconnaisse le second. Aucun élément n'ose reconnaître le premier, même les espaces et les lignes vides. . Non.
2. Après SetCookie(), il n'y aura aucune sortie lorsque vous appellerez echo $_COOKIE["name"] sur la page actuelle. Vous devez actualiser ou passer à la page suivante pour voir la valeur du cookie. La raison est simple. Une fois SetCookie() exécuté, un cookie est envoyé au client. Si vous n'actualisez pas ou ne parcourez pas la page suivante, comment le client peut-il vous renvoyer le cookie ? Une fois que le navigateur a créé un cookie, chaque requête adressée au site Web portera le cookie dans l'en-tête. Cependant, le cookie ne sera jamais envoyé aux demandes d'autres sites Web. Et le navigateur continuera à l'envoyer jusqu'à l'expiration du cookie.
3. Restrictions d'utilisation des cookies. Le nombre maximum de cookies pouvant être créés par un navigateur est de 30, et chaque cookie ne peut excéder 4 Ko. Le nombre total de cookies pouvant être paramétrés par chaque site WEB ne peut excéder 20. (C'est ce que j'ai lu dans le livre. Il faudrait qu'un site web ne puisse pas créer plus de 30 cookies. Sinon, il y a des centaines de cookies dans ma machine. Merci de me donner quelques conseils !)
4 , Les cookies sont stockés côté client. Si l'utilisateur désactive les cookies, vos cookies n'auront naturellement aucun effet ! Dans les navigateurs actuels, chaque fois que nous envoyons un cookie au client, celui-ci l'intercepte comme un chien de garde et demande à l'utilisateur s'il autorise l'entrée du cookie. Mon Dieu, les utilisateurs ne sont pas des experts. Combien de personnes savent ce que sont les cookies ? Peut-être qu’il sera traité comme un virus et exclu.


SESSION

1. Qu'est-ce que la session ?
La traduction chinoise de Session est appelée « conversation ». Sa signification originale fait référence à une série d'actions/messages qui ont un début et une fin. Par exemple, lors d'un appel téléphonique, la série de processus à partir de. décrocher le téléphone, composer le numéro, raccrocher le téléphone peut être appelé. C'est une session. La compréhension actuelle des sessions dans la société est très confuse : on peut parfois voir les mots "Pendant une session de navigateur,...", où la session fait référence à la période allant de l'ouverture à la fermeture d'une fenêtre de navigateur, vous pouvez également voir Quand ; faisant référence à la phrase « l'utilisateur (client) pendant une session », elle peut faire référence à une série d'actions de l'utilisateur (généralement une série d'actions liées à un objectif spécifique, comme la connexion, l'achat de biens et le paiement). Cependant, un tel processus d'achat en ligne peut parfois faire uniquement référence à une connexion ; la différence ne peut être déduite que du contexte. Cependant, lorsque le mot session est utilisé avec
réseau <. lorsqu protocole est associ il implique souvent deux significations : orient connexion et maintien de l signifie que les parties communicantes doivent un canal communication avant communiquer par exemple lors d t appel la ne peut pas commencer tant partie n r au le statut qui communique associer une s messages afin puissent uns des autres. serveur reconna personne vient. encore fois client se souvient qu devait dollar magasin derni fois. exemples ce type sont session tcp ou pop3 etant donn cette confusion irr difficile norme unifi lecture informations li nous pouvons fier contexte pour comprendre du moment o passons jusqu raccrocheons car reste connect> donc cet état connecté est appelé session C'est une variable publique qui existe toujours lors de l'interaction entre le visiteur et l'ensemble du site Web lorsque le client ne prend pas en charge le COOKIE, afin de garantir cela. les données sont correctes et sécurisées, la variable SESSION est utilisée. Les visiteurs du site Web se verront attribuer un identifiant unique, appelé identifiant de session. Il est soit stocké dans le cookie du client, soit transmis via l'URL. Protocole HTTP : Le protocole HTTP est considéré comme un protocole sans état et ne peut pas connaître l'état de navigation de l'utilisateur. Une fois la réponse terminée sur le serveur, le serveur perd le contact avec le navigateur. Ceci est différent de la nature originale du protocole HTTP. cohérent. Le client n'a qu'à demander au serveur de télécharger certains fichiers. Ni le client ni le serveur n'ont besoin d'enregistrer le comportement passé de chacun, tout comme un client et un serveur automatique. ou un hypermarché ordinaire (non-adhérent) c'est la même chose.
Par conséquent, les informations pertinentes de l'utilisateur sont enregistrées via SESSION (le cookie est une autre solution), afin que l'utilisateur puisse à nouveau accéder au serveur Web en confirmant cette identité. lors de la demande. L'invention des sessions permet à un utilisateur de sauvegarder ses informations lors du basculement entre plusieurs pages. Les programmeurs de sites Web ont tous cette expérience. Les variables de chaque page ne peuvent pas être utilisées dans la page suivante (bien que le formulaire et l'url puissent également être implémentés, mais ce sont des méthodes très insatisfaisantes), tandis que les variables enregistrées dans SESSION peuvent être utilisées comme valeur globale. variable. Alors à quoi sert SESSION ? Tout le monde a utilisé le panier lors de ses achats en ligne. Vous pouvez à tout moment ajouter les produits que vous choisissez au panier, et enfin vous rendre à la caisse pour payer. Pendant tout le processus, le panier a joué le rôle de stocker temporairement les produits sélectionnés. Il est utilisé pour suivre les
activités

de l'utilisateur sur le site. Il peut être utilisé pour l'authentification de l'identité de l'utilisateur, l'enregistrement de l'état du programme, le transfert de paramètres entre les pages, etc. La technologie COOKIE est utilisée dans la mise en œuvre de SESSION. SESSION enregistrera un COOKIE contenant l'identifiant de session (numéro de SESSION) côté client ; d'autres variables de session, telles que le nom de session, etc., seront enregistrées côté serveur. Lorsque l'utilisateur demande au serveur, le session_id est également envoyé au serveur. En extrayant les variables enregistrées côté serveur via le session_id, vous pouvez identifier qui est l'utilisateur. En même temps, il n'est pas difficile de comprendre pourquoi SESSION échoue parfois.      当客户端禁用COOKIE时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过php5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能。
     


2、Session常见函数及用法?
Session_start()开始一个会话或者返回已经存在的会话。
   说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误:
Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………
你可以在php.ini里启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。
请求结束后所有注册的变量都会被序列化。已注册但未定义的变量被标记为未定义。在之后的访问中这些变量也未被会话模块定义,除非用户以后定义它们。
警告: 有些类型的数据不能被序列化因此也就不能保存在会话中。包括 resource 变量或者有循环引用的对象(即某对象将一个指向自己的引用传递给另一个对象)。
注册SESSION变量 :
PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。
   注意:session_register(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle设为on,不过出于安全考虑,强烈建议关闭register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建议用$_SESSION代替之。例如:
Page1.php

Session_start();       //使用SESSION前必须调用该函数。
$_SESSION[‘name’]=”我是黑旋风李逵!”;   //注册一个SESSION变量
$_SESSION[‘passwd’]=”mynameislikui”;
$_SESSION[‘time’]=time();
echo &#39;<br /><a href="page2.php">通过COOKIE传递SESSION</a>&#39;;   //如果客户端支持cookie,可通过该链接传递session到下一页。
echo &#39;<br /><a href="page2.php?&#39; . SID . &#39;">通过URL传递SESSION</a>&#39;;//客户端不支持cookie时,使用该办法传递session.
?>
Page2.php
<?php
session_start();
echo $_SESSION[&#39;name&#39;]; //
echo $_SESSION[&#39;passwd&#39;];   //
echo date(&#39;Y m d H:i:s&#39;, $_SESSION[&#39;time&#39;]);
echo &#39;<br /><a href="page1.php">返回山一页</a>&#39;;

有两种方法传递一个会话 ID:
cookie
URL 参数
会话模块支持这两种方法。cookie 更优化,但由于不总是可用,也提供替代的方法。第二种方法直接将会话 ID 嵌入到 URL 中间去。
PHP 可以透明地转换连接。除非是使用 PHP 4.2 或更新版本,需要手工在编译 PHP 时激活。在 Unix 下,用 --enable-trans-sid 配置选项。如果此配置选项和运行时选项 session.use_trans_sid 都被激活(修改php.ini),相对 URI 将被自动修改为包含会话 ID。
session_id
    session_id() 用于设定或取得当前session_id。php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。
    如果session_id()有具体指定值的话,将取代当前的session_id值。使用该函数前必须启动会话:session_start();
    当我们使用session cookies时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。不论当前session_id是否与指定值相等。
session_id()如果没有指定值,则返回当前session_id();当前会话没有启动的话,则返回空字符串。
 ●检查session是否存在?
    在以往的php版本中通常使用session_is_register()检查session是否存在,如果您使用$_SESSION[‘XXX’]=XXX来注册会话变量,则session_is_register()函数不再起作用。你可以使用
isset($_SESSION[‘xxx’])来替代。
● 更改session_id  session_regenerate_id() 更改成功则返回true,失败则返回false。
使用该函数可以为当前session更改session_id,但不改变当前session的其他信息。例如:

<?php
 session_start();
 $old_sessionid = session_id();
 session_regenerate_id();
 $new_sessionid = session_id();
 echo "原始 SessionID: $old_sessionid<br />";
 echo "新的 SessionID: $new_sessionid<br />";
 echo"<pre class="brush:php;toolbar:false">";
 print_r($_SESSION);
 echo"
"; ?>


session_name()返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id.
session改名示例:

<?php
 $previous_name = session_name("WebsiteID");
 echo "新的session名为: $previous_name<br />";
 ?>

如何删除session?
1、unset ($_SESSION['xxx'])删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。 session_unregister()在PHP5中不再使用,可将之打入冷宫。
unset($_SESSION)  此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量。
2、$_SESSION=array()删除多个session
3、session_destroy()结束当前的会话,并清空会话中的所有资源。。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
    返回值:布尔值。
    功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true

   session_unset() 如果使用了$_SESSION,则该函数不再起作用。由于PHP5必定要使用$_SESSION,所以此函数可以打入冷宫了。

下面是PHP官方关于删除session的案例:

<?php
 // 初始化session.
 session_start();
 /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
 $_SESSION = array();
 /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
 if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), &#39;&#39;, time()-42000, &#39;/&#39;);
 }
 // 最后彻底销毁session.
 session_destroy();
 ?>

由此我们可以得出删除Session的步骤:
①session_start()
②$_SESSION=array()/unset($_SESSION['xxx'])
③session_destroy()

● Sécurité de la SESSION :
Le module de session ne peut garantir que les informations stockées dans la session ne peuvent être vues que par l'utilisateur qui a créé la session. En fonction des données qu'il héberge, des mesures supplémentaires doivent être prises pour protéger de manière proactive l'intégrité de la session.
L'évaluation des données transportées au cours d'une session et la mise en œuvre de mesures de protection supplémentaires ont souvent un coût et réduisent le confort de l'utilisateur. Par exemple, si vous souhaitez protéger les utilisateurs des politiques sociales simples (remarque : l'ID de session affiché dans l'URL sera vu par d'autres personnes sur l'écran de l'ordinateur, ou obtenu par d'autres sites Web via HTTP Referer, etc.), vous devez l'activer. . session.use_only_cookies. Dans ce cas, le client doit activer sans condition les cookies, sinon la session ne fonctionnera pas.
Il existe plusieurs façons de divulguer les identifiants de session existants à des tiers. Un ID de session divulgué permet à un tiers d'accéder à toutes les ressources associées à l'ID spécifié. Tout d'abord, l'URL contient l'ID de session. Si vous vous connectez à un site externe, l'URL contenant l'ID de session peut être stockée dans le journal des référents du site externe. Deuxièmement, un attaquant plus actif peut écouter les paquets sur le segment du réseau. S'il n'est pas chiffré, l'ID de session circule sur le réseau en texte clair. La solution consiste à implémenter SSL sur le serveur et à forcer les utilisateurs à l'utiliser.
Par défaut, toutes les données liées à une session spécifique sont stockées dans un fichier dans le répertoire spécifié par l'option INI session.save_path. Un fichier est créé pour chaque session (indépendamment du fait qu'il existe ou non des données associées à cette session). En effet, un fichier est créé à chaque fois qu'une session est ouverte, que des données soient écrites ou non dans le fichier. Notez qu'en raison des limitations de l'utilisation du système de fichiers, ce comportement a un effet secondaire, qui peut entraîner la perte de sessions par les gestionnaires de sessions personnalisés par l'utilisateur (comme l'utilisation de Base de données). ne stockez pas de données.
Les fonctions présentées ci-dessus seront utilisées ci-dessous, mais certaines fonctions liées à la session sont également introduites :
session_encode
Fonction fonction : encodage des informations de session
Prototype de fonction : chaîne session_encode(void) ;
Valeur de retour : String
Description de la fonction : La chaîne renvoyée contient le nom et la valeur de chaque variable dans la variable globale, sous la forme : a|s:12:"c'est un test";c|s:4:"lala"; a est le nom de la variable s:12 représente la valeur de la variable a "c'est un test, la longueur est de 12, et les variables sont séparées par points-virgules ";". > session_decode
Fonction : décoder les informations de session
Prototype de fonction : booléen session_decode (données de chaîne)
Valeur de retour : valeur booléenne
Description de la fonction : Cette fonction peut décoder les informations de session et renvoyer un valeur logique en cas de succès vrai
Php5 n'utilise plus session_id, mais le transforme en un SID constant et l'enregistre dans un cookie Si le client désactive les cookies, php transmettra automatiquement le SID via l'URL et la condition est de définir. php.ini. session.use_trans_sid = 1. Peu importe si le client désactive les cookies
Utilisez strip_tags() pour afficher le SID afin d'éviter les attaques liées au XSS.

Session跨页传递问题:
session跨页传递需要考虑三种情况:
①客户端禁用了cookie。
②浏览器出现问题,暂时无法存取cookie
③php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?下面解释一下原因:
Session文件分为两部分:session变量保存在服务器端(默认以文件方式存储session);而session id则以cookie形式保存在客户端。(注意:session默认是基于cookie的)。
    当用户的浏览器向服务器提出请求时,同时发送包含session id的cookie(默认情况下)。服务器根据客户端提供的session id来得到用户的文件,即保存在服务器端的session变量值。事实上,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。
    PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是 session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,其一:“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”;其二:运行PHP的服务器必须是unix/linux系统,windows不具备此项功能。
     明白了以上的道理,我们就可以得出解决session跨页传递问题的三条途径:
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
下面举例说明:
第一种情况:
page1.php

<?php
 session_start();
 $_SESSION[&#39;var1&#39;]="中华人民共和国";
 $url="<a href="."\"s2.php\">下一页</a>";
 echo $url;
 ?>
 page2.php
 <?php
 session_start();
 echo "传递的session变量var1的值为:".$_SESSION[&#39;var1&#39;];
 ?>

运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。
现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”,又得到结果“中华人民共和国”

第二种途径:
s1.php

<?php
 session_start();
 $_SESSION[&#39;var1&#39;]="中华人民共和国";
 $sn = session_id();
 $url="<a href="."\"s2.php?s=".$sn."\">下一页</a>";    //PHP5定义了一个常量SID来表示session_id(),$url还可以写成$url=&#39;<a href="page2.php?&#39; . SID . &#39;">下一页</a>&#39;;
 echo $url;
 ?>
 s2.php
 <?php
 session_id($_GET[&#39;s&#39;]);
 session_start();
 echo "传递的session变量var1的值为:".$_SESSION[&#39;var1&#39;];
 ?>


第三种途径:

login.html 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
 <head> 
 <title>Login</title> 
 <meta http-equiv="Content-Type" content="text/html; charset=??????"> 
 </head> 
 <body> 
 请登录: 
 <form name="login" method="post" action="mylogin1.php"> 
 用户名:<input type="text" name="name"><br> 
 口 令:<input type="password" name="pass"><br> <input type="submit" value="登录">
  </form> 
  </body> 
  </html> mylogin1.php <?php $name=$_POST[&#39;name&#39;]; 
  $pass=$_POST[&#39;pass&#39;]; if(!$name || !$pass) {     
  echo "用户名或密码为空,请<a href=\"login.html\">重新登录</a>";     
  die(); } if (!($name=="laogong" && $pass=="123")) 
  {     echo "用户名或密码不正确,请<a href=\"login.html\">重新登录</a>";     
  die(); } //注册用户 ob_start(); 
  session_start(); 
  $_SESSION[&#39;user&#39;]= $name; $psid=session_id(); 
  $fp=fopen("e:\\tmp\\phpsid.txt","w+"); 
  fwrite($fp,$psid); 
  fclose($fp); //身份验证成功,进行相关操作 echo "已登录<br>"; 
  echo "<a href=\"mylogin2.php\">下一页</a>"; ?> mylogin2.php <?php $fp=fopen("e:\\tmp\\phpsid.txt","r"); 
  $sid=fread($fp,1024); fclose($fp); session_id($sid); 
  session_start(); if(isset($_SESSION[&#39;user&#39;]) && $_SESSION[&#39;user&#39;]="laogong" ) {      
  echo "已登录!"; } else {     //成功登录进行相关操作     echo "未登录,无权访问";

推荐学习:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer