Lorsque nous utilisons PHP pour développer le backend, nous devons sauvegarder certaines données, et notre approche habituelle consiste à Sauvegarde de la base de données, mais parfois nous n'avons pas besoin de la sauvegarder dans la base de données. Par exemple, lorsque nous nous connectons à la page Web, l'heure de notre dernière visite sur le site Web est affichée sur le site Web. La visite n'a pas besoin d'être enregistrée dans la base de données. En même temps, après nous être connecté à une certaine page Web, nous enregistrons le nom d'utilisateur de connexion. Nous n'avons pas besoin de les enregistrer dans la base de données, mais utilisons la technologie de session en PHP. pour le résoudre.
La technologie des cookies et la technologie de session de PHP sont toutes deux destinées aux sessions. La session peut ici être comprise comme le moment où un utilisateur ouvre un navigateur et visite un site Web. À partir du moment où l'utilisateur accède au site Web jusqu'à la fin lorsqu'il ferme la page du site Web, nous appelons cela une session. Au cours d'une session, un utilisateur peut cliquer plusieurs fois sur divers hyperliens sur les pages du site Web.
Lorsque nous visitons un site Web et les pages du site Web, nous lançons le site Web. C'est juste une séance.
Parfois, lorsque nous visitons un site Web, nous pouvons voir sur la page Web l'heure à laquelle nous avons visité le site Web actuel dès que nous accédons au site Web. beaucoup. Ce temps peut être sauvegardé grâce aux cookies.
Le cookie est une technologie côté client. Le serveur écrit les données de chaque utilisateur dans le navigateur respectif de l'utilisateur sous la forme d'un cookie. Lorsque les utilisateurs utilisent un navigateur pour accéder aux ressources Web sur le serveur, ils apportent avec eux leurs propres données. De cette manière, les ressources Web traitent les propres données de l'utilisateur. Notez que la technologie des cookies est un fichier écrit côté navigateur. Parallèlement, les cookies sont enregistrés sous forme de paires clé-valeur.
Comme le montre l'organigramme ci-dessus, si un cookie doit être créé dans le fichier PHP du serveur, le serveur encapsule les informations de création de cookie dans l'en-tête de réponse de le protocole http Pour transférer des informations, le navigateur analyse l'en-tête de réponse après l'avoir reçu. Il sait que le serveur doit créer un cookie dans le navigateur et crée un fichier cookie localement via les informations contenues dans l'en-tête de réponse lorsque le navigateur le visite. à nouveau sur le site Web, les informations sur les cookies locaux seront envoyées au serveur.
Cookie:user=abc; PHPSESSID=v6ntsa42f4v0h5jpaoa1tot8r6
A propos de l'utilisation des cookies, elle peut être simplement comprise comme l'opération d'ajout, de suppression, de modification et de vérification des cookies.
La création de cookies est en fait très simple
<?php //通过setcookie函数进行cookie的创建 setcookie('username','abc',time()+3600);
Nous créons des cookies via la fonction setcookie(), et le cookie va être enregistré dans le cache du navigateur.
Set-Cookie:username=abc; expires=Mon, 17-Oct-2016 08:55:51 GMT; Max-Age=3600
setcookie(paramètre 1, paramètre 2, paramètre 3) On peut voir dans le code que trois paramètres sont passés dans cette fonction,
Le premier paramètre est le nom de la clé qui contient l'information.
Le deuxième paramètre est la valeur correspondant à la clé
Le troisième paramètre est l'heure d'enregistrement de ce cookie, et l'heure enregistrée ici est l'heure actuelle. Ajoutez 3600 secondes à l'heure. Lorsque cette heure est dépassée, le cookie expirera.
Lorsque nous avons fini d'exécuter le code ci-dessus, nous pouvons voir le fichier cookie créé dans le fichier cache du navigateur, qui contient nos données enregistrées.
username abc www.lijiafei.com/test3/ 1536 2120470400 30550100 480638768 30550092 *
Dans ce qui précède, nous avons enregistré les données. Le but de l'enregistrement des données est de lire les données, et la lecture du cookie peut. Compris comme :
Lorsque le navigateur demande une page d'un site Web, selon le protocole http : le navigateur enverra les informations de cookie du site Web au serveur via la requête http After. en demandant la page
le serveur reçoit les informations du cookie, elles seront encapsulées dans le tableau $_COOKIE.
Nous lisons dans le tableau $_COOKIE.
<?php echo '<pre class="brush:php;toolbar:false">'; //自动封装到这个数组里面 var_dump($_COOKIE); //通过键名取出值。 $username = $_COOKIE['username']; echo $username; ......结果....... array(3) { ["user"]=> string(3) "abc" ["username"]=> string(3) "abc" ["PHPSESSID"]=> string(26) "v6ntsa42f4v0h5jpaoa1tot8r6" } abc
Lorsque nous accédons au fichier, les informations du cookie sont transmises via l'en-tête de la requête.
Cookie:user=abc; username=abc; PHPSESSID=v6ntsa42f4v0h5jpaoa1tot8r6
Quand on veut modifier la valeur d'un cookie, on utilise toujours setcookie pour compléter la modification, mais Si le cookie n'existe pas, créez-le ; s'il existe déjà, modifiez-le.
<?php //通过setcookie函数进行修改,但是如果浏览器没有cookie则进行创建。 setcookie('username','abc123',time() + 1600);
Lorsque nous lisons la valeur du cookie, nous pouvons voir que la valeur à l'intérieur a été modifiée avec succès.
array(3) { ["user"]=> string(3) "abc" ["username"]=> string(6) "abc123" ["PHPSESSID"]=> string(26) "v6ntsa42f4v0h5jpaoa1tot8r6" } abc123
Lorsque nous ne pouvons plus utiliser le cookie, nous pouvons manuellement détruire la valeur du cookie.
La suppression des données des cookies peut être comprise en deux étapes, 1. Supprimer le fichier cookie stocké dans le cache du navigateur, 2. Supprimer les données stockées dans le tableau $_COOKIE du serveur.
<?php //使用setcookie这个函数进行删除 setcookie('username','',time()-1); //删除保存在$_COOKIE里面的数据 if(isset($_COOKIE['username'])){ unset($_COOKIE['username']); } //删除保存在浏览器中这个网站的所有的cookie foreach ($_COOKIE as $key => $value) { setcookie($key,$value,time()-1); } //销毁所有数据 unset($_COOKIE);
Nous pouvons supprimer toutes les informations des cookies en exécutant le code ci-dessus.
Ce qui précède est l'opération la plus élémentaire des cookies. Mais il y a encore beaucoup de choses auxquelles nous devons prêter attention :
一个Cookie只能标识一种字符串信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。就是说cookie 总是 名=值的形式保存。
在默认的情况下,我们创建多个的cookie,将保存在同一个文件中.
一个WEB站点可以给一个浏览器发送多个Cookie,一个浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie, 每个站点最多存放20个,每个Cookie的大小限制在4K,但是不同的浏览器,情况可能不同。
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用setcookie()函数的第三个参数设置时间,并给出一个以秒为单位的时间。要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。 就是说,我们的cookie默认的生命周期就是一个会话周期。如果希望设置,就需要 setcookie(‘name’, ‘val’, 时间)
如果希望cookie长久有效,可以这样创建cookie setCookie(“key”,”val”,PHP_INT_MAX);
我们可以看到在操作cookie的时候,都是通过setcookie进行不同的设置,但是我们在查帮助文档的时候,可以看到setcookie的参数并不是三个,而是可以七个参数。
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
而我们上面使用的就是前三个参数,设置键和值,同时设置保存的时间。
在setcookie()函数中第四个参数是控制cookie的有效路径的,当我们不设置的时候,默认的是当前路径和后台路径有效,但是当我们设置成’/’的时候,cookie全站有效。
案例目录结构:
...test |_readcookie.php(读取cookie信息) |_abc |_createcookie.php(创建cookie) |_def |_readcookie.php(读取cookie);
两个readcookie.php代码一样:
<?php echo '<pre class="brush:php;toolbar:false">'; var_dump($_COOKIE);
创建cookie的代码:
<?php //创建cookie保存数据 setcookie('user','abc',time() + 1600,''); //再创建一个cookie信息,这两个cookie会保存在一个cookie文件里面 setcookie('password','123',time() + 1600,'/');
创建cookie的时候,第一个键值使用默认的有效路径第二个键值使用全站的有效路径。
当访问test目录下的readcookie.php文件时,只能显示password-123的键值信息。
array(1) { ["password"]=> string(3) "123" }
我们在开发中可能出现在一个网站(www.test.com)下面有两个域(www.a.test.com,www.b.test.com)名,如果我们不对cookie进行设置,这两个域名是不能互相访问对方的cookie的,但是如果我们对cookie进行设置,就可以实现域名共享。而setcookie()的第五个参数就是控制域名共享的。
<?php //设置第五个参数表示两个域名可以共享cookie数据。 setcookie('username','abc','','','.test.com');
在我们在浏览网页的时候,大多数使用的的协议是HTTP协议,但是还有一种协议是HTTPs协议,这种协议比http协议更加安全,在开发中有时候当我们需要对某些重要的cookie数据必须在https协议下才能被传输,这是就会用到setcookie()函数的第六个参数进行设置。
<?php //第五个参数设置为false表示可以在http协议和https协议下传输。 setcookie('username','abc','','','',false); //第五个参数设置为false表示只能在https协议下传输。 setcookie('password','123','','','',true);
在默认情况下,cookie值是可以被其他脚本获取的,比如是JavaScript,这是就可能存在安全问题,那我们怎么防止其他脚本来读取cookie呢?
在setcookie()函数的最后一个参数就是控制cookie只能http协议进行读取。
<?php //最后一个参数,设置为true表示只能是https协议进行读取。 setcookie('username','abc','','','',false,false);
上面的就是对会话技术cookie的介绍。在会话技术中还有之中技术也就是session。
在我们登录网页时,输入正确的账号和密码后,我们可以使用会话技术的session技术进行保存数据。
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
当我们在服务器需要创建一个session的时候,会在服务器创建一个session文件,并且每个会话独享一份session文件,在服务器session文件默认存在在 c:/windows/temp 目录, 但是我们也可以在php.ini中进行修改。当服务器创建session后,会在返回数据的时候把session的id号封装到http协议的响应头中。
SetCookie:PHPSESSID=58j6c68qo6fhn31qrmt6bbrv70; path=/
这个响应信息和创建cookie的信息很想,但是浏览器并不会在浏览器的缓存中创建cookie文件。当浏览器保存住session的ID后,如果又要访问网页,浏览器会把session的ID封装在请求头中发送给服务器。
Cookie:PHPSESSID=58j6c68qo6fhn31qrmt6bbrv70
session的操作大致也可以分为增删改查四个步骤。
但是不管是什么操作都需要在操作前开启session机制,使用sessio_start()函数进行开启。同时session数据的保存也是通过键值对的方式进行保存的。session保存的数据类型可以是int,float,boolean,string,array,object。
<?php //开启session机制 session_start(); //把数据保存在$_SESSION数组里面。 $_SESSION['user'] = 'abc';
先开启session机制,然后把需要的数据保存在$_SESSION数组里面当我们运行代码可以在http协议的响应头中添加了一段话:
Set-Cookie:PHPSESSID=p4lsn4vrdjtmkou1qc3tn3n577; path=/
同时我们也可以参看我们在服务器保存的session文件。
user|s:3:"abc";
<?php //先开启session机制 session_start(); echo '<pre class="brush:php;toolbar:false">'; //保存在session里面的数据会自动封装到$_SESSION数组里面 var_dump($_SESSION); ......结果...... array(1) { ["user"]=> string(3) "abc" }
当我们读取session的数据的时候,先开启session机制,这样服务器就会把session文件里面的数据封装到$_SESSION数组中,从而就可以对数据进行操作。
session的修改和cookie的修改是一样的,session怎么创建,就怎么修改,如果数据不存在就创建,如果数据存在就修改。
当我们不需要某些session数据的时候,我们可以进行数据的删除,当然,我们可以删除一个数据,也可以删除全部数据,甚至也可以删除session文件。
<?php session_start(); // if(isset($_SESSION['user'])){ // //删除其中一个数据 // unset($_SESSION['user']); // } // //通过循环删除全部的数据。 // foreach ($_SESSION as $key => $value) { // unset($_SESSION[$key]); // } //删除session文件 session_destroy();
我们可以根据自己的需求进行不同数据的删除。
从上面的讲解中可以看到操作session的函数并不像cookie一样只是一个函数,关于session的操作函数有许多。
在上面我们都是使用了session_start()函数来启动session机制,其实PHP给我们提供了两种方式来开启session
直接在php文件中使用session_start()函数;这种方式比较灵活,推荐使用这种方式。
直接在php.ini 文件中,配置session.auto_start = 1 设置1就可以自动打开session机制. 默认情况下这个值是 0,这种方式不推荐使用。
关于session的安全和cookie的安全设置一样,但是session不是通过函数的参数进行设置的,而是在php.ini文件中进行配置的。其中有几个关键的值:
session.save_path:session数据保存在服务器的路径。
session.cookie_secure:这个参数的作用和cookie很像,在传输给服务器时,是否安全传输,即是否使用https传输。
session.cookie_httponly:只能http协议进行读取。
session.cookie_domain:在传输给服务器时,有效域名的设置。
上面的参数我们都是直接在php.ini配置里面修改的,这种修改是永久性的,但有时我们要求只是临时的修改php.ini文件,就可以使用ini_set()函数进行配置。ini_set函数可以去临时修改php.ini 的设置,而且设置只对当前的这个会话有影响。但是有一点ini_set函数要在 session_start()前,才能生效.
在上面我们在使用session的时候,只是简单的进行session_start()函数开启session机制,并且把数据封装到$_SESSION数组里面,但是我们并没有了解其中的过程,数据是怎么存储在数组里面,又是在什么时候保存在session文件中的,当destroy掉session文件的时候又是在哪里进行执行的,都没有了解。
session的存储机制大致可以分为三步,从session_start开始,到一个文件运行结束
在session_start()开启session机制后,
判断浏览器传过来的数据中是否带有session_id,如果有就使用,没有就创建一个session文件。
将session文件中的数据读取到$_SESSION数组中。
启用session的垃圾回收机制,判断哪些session是失效的,删除失效的session文件。
在脚本周期内,我们可以对$_SESSION数组进行增删改查的操作,注意在这里操作的数据并不会对保存在服务器端的session文件有影响。同时如果在这里使用session_destroy(),就会删除session文件并关闭session机制。
À la fin du script, déterminez d'abord si le mécanisme de session est fermé. Sinon, les données du tableau $_SESSION seront écrites dans le fichier de session.
Ce qui précède est le mécanisme de stockage de la session. Comprendre et maîtriser le mécanisme de stockage nous sera très utile pour utiliser la session.
Dans le mécanisme de stockage ci-dessus, nous savons qu'après avoir ouvert le mécanisme de session, dans un premier temps, nous jugeons quels fichiers sont invalides, puis le la session sera activée Le mécanisme de récupération de place (GC) effectue le recyclage, mais il n'a pas besoin d'être recyclé à chaque fois qu'il est activé. En fait, il y a deux paramètres dans le fichier php.ini qui définissent la probabilité d'activation de gc.
session.gc_probability
session.gc_pisor= 10000
Ils forment une paire, ce qui signifie Quelle est la probabilité d'un garbage collection ? La formule de calcul de la probabilité est session.gc_probability/session.gc_pisor = 1/10000. C'est-à-dire que lorsque la fonction session_start() est appelée 10 000 fois, le mécanisme de garbage collection sera déclenché. une fois.
Mais nous définissons des probabilités différentes pour différents sites Web. Pour les grands sites Web, session.gc_pisor est défini plus grand, comme 10 000, les sites Web de taille moyenne 500-1 000, les petits sites Web, 200-300, pour éviter de déclencher fréquemment GC. .
Les technologies de session cookie et session sont encore beaucoup utilisées dans le développement PHP Comprendre les différentes caractéristiques des deux technologies nous permet d'être plus flexibles dans le développement. stocker différentes données.
Ce qui précède est le contenu de la technologie de session COOKIE et SESSION dans le didacticiel de base PHP 17. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !