Maison > Article > développement back-end > PHP doit mentionner les sessions et les cookies
Que sont les sessions et les cookies ?
session et cookie sont une sorte de technologie de contrôle de session. Couramment utilisé dans la reconnaissance d'identité, la vérification de connexion, la transmission de données, etc. Par exemple, lorsque nous allons au supermarché pour payer, nous devons sortir notre carte de membre pour bénéficier de la réduction. À l’heure actuelle, comment pouvons-nous déterminer que cette carte de membre est réelle et valide ? Lorsque nous donnons le numéro de membre au caissier, celui-ci le saisit dans le système en fonction du numéro de membre que nous avons fourni. Le système interrogera en fonction du numéro de membre s'il est trouvé, cela prouvera que le numéro de membre est réel. Le numéro de membre ici est comme le cookie et la session. Le système d'adhésion est comme le serveur, et le caissier est comme le client
Pourquoi la session et le cookie sont-ils utilisés ?
Sur la base des exemples ci-dessus, nous savons ce que la session et le cookie peuvent faire, alors pourquoi devons-nous les utiliser pour y parvenir ? Ici, il est nécessaire de comprendre les caractéristiques du protocole de transfert d'application HTTP. Étant donné que le protocole http est sans état, c'est-à-dire que le navigateur demande une page Web, ce qui est une requête http. Lorsque le serveur reçoit la requête, il renvoie les données requises par le client. Au cours de ce processus, le navigateur et le serveur établissent une. Un connecté. Mais lorsque le serveur renvoie des données et que le client reçoit les données, leur relation de connexion est déconnectée. La prochaine fois que le navigateur enverra une requête, il rétablira une connexion. Ces deux liens n'ont rien à voir l'un avec l'autre. Imaginez, lorsque nous nous connectons au système d'un centre commercial, nous accédons à la page d'accueil et effectuons l'opération de connexion, mais lorsque nous passons une commande ou ajoutons au panier, nous devons toujours nous connecter. Chaque fois que nous visitons une page, n'est-ce pas très fastidieux et également très gênant ? Scientifiquement, si nous cliquons pour passer une commande après avoir ajouté un produit au panier, nous devons nous connecter à la page de commande et cela ne pourra pas se faire. pour commenter correctement les produits lorsque vous avez passé la commande.
Fonctionnalités Http
1 Le protocole http prend en charge le mode client/serveur et est également un protocole en mode requête/réponse. .
2. Aucune connexion. Ce qu'on appelle sans connexion signifie qu'une fois que le serveur a reçu la demande du client, complété la réponse et reçu la réponse du client, il déconnecte la connexion. Limitez chaque connexion pour gérer une seule demande. Cela permet de gagner du temps de transmission.
3. Apatride. Le protocole http n'a aucune capacité de mémoire pour le traitement des transactions. Cela signifie que si les informations précédentes sont nécessaires, elles ne peuvent être que retransmises, ce qui augmentera la quantité de données transmises. Cette méthode libère le serveur dans une certaine mesure, mais elle n'est pas propice à la connexion entre le client et le serveur. Afin de combler cette lacune, deux technologies d'enregistrement du statut http ont été produites, l'une s'appelle Cookie et l'autre s'appelle Session. Nous en parlerons en détail plus tard.
4. Simple et rapide : ce qu'on appelle simple et rapide signifie que lorsque le client demande un service au serveur, d'une manière générale, il lui suffit de transmettre la méthode de demande et le chemin d'accès
5. Flexible : cela signifie principalement que le client peut transmettre tout type de données via le protocole http. Par exemple, lors du transfert de fichiers .jpg, .ppt, etc., il vous suffit de définir le type de contenu à transférer.
Cookie
Concept de base du cookie
Le cookie est un mécanisme permettant aux navigateurs distants de stocker des données pour suivre et identifier les utilisateurs De la mise en œuvre Disons, un cookie est une donnée stockée sur le client.
Principe de fonctionnement des cookies et mécanisme de stockage
Principe de fonctionnement
1. >2. Le serveur définit une instruction pour créer un cookie et répond au client.
3. Le client reçoit l'instruction du serveur et crée un cookie sur le client conformément à l'instruction.
4. Lors du blocage de la requête suivante, le client transporte ce cookie et envoie une requête au serveur.
Mécanisme de stockageEn général, les cookies sont stockés. sur le client Il existe trois formes de stockage. Différents navigateurs ont des mécanismes de stockage différents et des cookies différents
1. Le navigateur créera un fichier séparé dans le répertoire correspondant sur le disque pour différents domaines afin de stocker la valeur du cookie sous le domaine.
2. Stockage en mémoire. Ce cookie disparaît à la fermeture du navigateur. Selon la syntaxe de création ci-dessous, cette situation se produira lorsque nous ne définirons pas le délai d'expiration.
3.stockage flash. Cette méthode de stockage est stockée de manière permanente sur le disque. Même si vous supprimez certaines données via le navigateur, les cookies stockés dans cette méthode ne peuvent pas être supprimés. Si vous devez les supprimer, vous pouvez utiliser le disque
<.> Paramètres du cookie
Bool setcookie(string $name[, string $values, $expire=0[,string $path[,string $domain[, bool $secure = false[, bool $httpOnly = false]]]]] );$name : Le nom stocké dans le cookie, une option obligatoire $values : La valeur stockée dans le cookie. Ce qu'il faut noter ici, c'est que lorsque la valeur est définie sur false, le client essaiera de supprimer la valeur du cookie. Ainsi, lorsque la valeur doit être vraie ou fausse, nous utilisons une autre valeur à la place, par exemple 1 pour true. , remplacez false par 0.
$expire:cookie的过期时间,秒为单位,当该值被设置时,定时删除;当该值没有设置时,该值是永久有效的.该值设置为小于当前时间时,会出发浏览器的删除机制,会自动删除cookie.
$path:cookie有效的目录,默认的目录是"/",即表示当前的正个域名都生效.
$domain:cookie的作用域名,默认的是当前域名有效,如果需要设置直接填写生效的域名即可.需要注意的是IE浏览器有长度限制,当只有大于5的时候才会生效.
$secure:cookie的加密处理,当设置为true的时候,需要使用HTTPS协议,才会生效.
$httpOnly:决定cookie是否只使用http协议,当设置为1或者true,其他非http协议是无法操作cookie的。例如我们未设置的时候,我们JavaScript是可以对cookie进行设置的.这样一定程度上保证了安全性.这种情况需考虑浏览器是否支持该配置项.
. 设置 cookie 的函数还有 setrawcookie () 函数,只不过该函数不会对值 进行 urlencode 序列号.
.ac48bac2b8b96521dcd0023c5193ba8e 有时候,我们可能遇到这种情况,我们在这个页面设置了 cookie,但是去刷新页面获取 cookie,按理说是会获取到 cookie 的,但实际情况是无法获取到,这是由于 cookie 运行机制导致,PHP 创建了 cookie 这个指令,告诉浏览器,你需要执行这个指令了,这时候浏览器才会去执行这个指令,因此是无法获取到 cookie 的.
. 在设置 cookie 之前,不能有任何输出.
// 实现方式一 setcookie($cookie,"hello,world!", 3600); // 实现方式二 header("header("Set-Cookie: testcookie=中文; path=/; domain=.sunphp.org; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT",time()+9600));"); // 两则的作用是一样的,setcookie是PHP内置函数,是对http协议的操作封装。
cookie 的获取
$_COOKIE['$cookeName'];
cookie 的应用
. 用户身份识别
. 数据传输
. 登录控制 (是否登录、单点登录)
cookie 跨域设置
我们都知道,在前端开发中时常会遇到 ajax 跨域问题,我们解决的方式有很多种,可以参考这篇文章传送门 1,传送门 2,cookie 跨域我们可以参考 p3p 传输协议传送门
cookie 使用的注意事项
. 数量限制,客户端对每一个 domian 下的 cookie 是有数量限制的,不是创建任意数量就行.
. 安全性,根据上面的创建语法,我们可以得知,当我们未设置 $httpOnly 值得时候,非 http 协议是可以操作 cookie 的值的,例如 JavaScript 通过 cookie ($cookieName). 而且一些抓包工具也是可以抓取到 cookie 的,还有就是 cookie 存储在客户端的文件中,如果获取到这个 cookie,也是可以对 cookie 做一些操作的。为了防止别人可以拷贝 cookie 文件,进行恶意操作,可以对 cookie 进行加密处理.
数据传输:当 cookie 数量很多,数据很大的时候,其实对于带宽是有消耗的。比较 http 传输都需要带宽,当 http 传输的数据量大了,带了的带宽消耗就大.
Session
运行原理与存储机制
. 运行原理
1. 客户端向服务端发起请求,建立通信
2. 服务端根据设置的 session 创建指令,在服务端创建一个编号为 sessionid 的文件,里面的值就是 session 具体的值 (组成部分 变量名 | 类型 : 长度:值).
3. 服务端将创建好的 sessionid 编号响应给客户端,客户则将该编号存在 cookie 中 (一般我们在浏览器存储的调试栏中会发现 cookie 中有一个 PHPSESSID 的键,这就是 sessionid,当然这个名称,我可以通过设置服务端是可以改变的).
. 当下一次请求时,客户端将这个 sessionid 携带在请求中,发送给服务端,服务端根据这个 sessionid 来做一些业务判断.
. 存储机制
1. 存储方式.session 默认是文件存储的。我们可以通过 php.ini 的配置来设置存储驱动传送门
2. 生命周期。当我们未设置 session 的生命周期时,当浏览器关闭之后存储在客户端的 phpsessid 自动消失,因为它是存在内存,下次建立连接的时候会重新创建一个 phpsessid. 之前的 session,PHP 会自动的根据垃圾回收机制自动删除。这里我们可以根据 session_set_cookie_params ($expire) 函数来设置一个生命周期;
session 的设置
session_start(); $_SESSION = $values;
. session_start () 设置之前,不能有任何输出
session 的获取
$_SESSION['values'];
session 的删除
// 只是单纯的给重新赋了一个空的值 $_SESSION['values'] = ''; // 该函数是清空所有的session,慎用! session_destroy(); // 连values这个session键都会删除 unset($_SESSION['values']);
session 的使用场景
. 用户身份识别
. 数据传输
. 登录控制 (是否登录、单点登录)
session 的注意事项
. 安全性,sessionid 是按照一定的算法生成,要保证 session 的值唯一性和随机性.
. Le client désactive les cookies. D'après le principe de fonctionnement de la session ci-dessus, on peut conclure que le stockage et la transmission de la session dépendent toujours du client. Par conséquent, lorsque le client désactive les cookies, le client ne peut pas sauvegarder les cookies. PHPSESSID. À ce stade, vous pouvez passer la réécriture d'URL ou le formulaire pour réaliser la transmission de session
, selon la création de session ci-dessus, toutes les sessions seront créées dans un répertoire, et certaines sessions invalides ne le seront pas. être supprimé dans le délai du mécanisme de récupération de place. Lorsqu'un serveur est configuré avec de nombreux sites, de nombreux fichiers de session seront générés à ce moment-là, ce qui ralentira notre vitesse de lecture. Nous pouvons définir le niveau du répertoire de stockage de la session. et la fonction save_path. Généralement, pour les grands projets (tels qu'un projet distribué), vous pouvez utiliser d'autres méthodes de stockage, telles que le stockage de données et le stockage en mémoire
La différence entre session et cookie
. La session est stockée côté serveur, le cookie est stocké côté client..Les instructions de création de cookies sont définies par le serveur. L'ID de session de .session doit être défini. être stocké côté client. Plusieurs malentendus entre cookies et sessions Le client interdit les cookies et la session ne peut pas être utilisée ? L'utilisation de la réécriture d'URL ou de la soumission de formulaire peut être réalisée En comparant la sécurité de la session et du cookie, la session est-elle plus sécurisée côté client ? Étant donné que les cookies existent côté client, la sécurité est relativement faible, mais vous pouvez définir la valeur $httpOnly lors de la création Étant donné que les cookies et les sessions sont liés les uns aux autres, obtenez une fois le. Le cookie a acquis la session dans une certaine mesure, vous pouvez également exploiter la session. Le cookie et la session disparaîtront-ils à la fermeture du navigateur ? Cela nécessite de vérifier le mécanisme de stockage. Les cookies peuvent être stockés dans des fichiers, en mémoire et en flash. Bien entendu, s'ils sont stockés en mémoire, ils disparaîtront à la fermeture du navigateur en raison du mécanisme de récupération de place, la session ne sera pas supprimée lorsqu'elle sera dans la poubelle. mécanisme de collecte, sauf si l'opération de suppression est indiquée dans votre code. Les cookies sont stockés sur le client, comment augmenter leur sécurité ? Nous pouvons ajouter certains paramètres spéciaux lors de la configuration des cookies, tels que les informations IP du client, les informations du navigateur, etc. Lorsque le cookie est stocké dans le fichier du client, est-ce pour chaque navigateur ? est-il possible de fonctionner même si le fichier est obtenu par le serveur ? Cela dépend si le mécanisme de gestion des cookies est le même entre les navigateurs Recommandations associées : "Tutoriel 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!