HTTP状态管理机制之Cookie,状态机制cookie
HTTP状态管理机制之Cookie,状态机制cookie
一、cookie 起源
cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE、Chrome、Firefox、Opera 等都支持。
cookie 的诞生是由于 HTTP 协议的天生缺陷,HTTP 是一种无状态的协议,简单的 Request 和 Response 一旦请求/响应结束,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,即服务器并不清楚是哪个客户端。
一些典型应用如 登陆/购物车 就无法实现了。比如,用户 A 在购物商城购买的商品都应该放在 A 的购物车内,不论是用户 A 什么时间购买的,这都是属于同一个会话的,不能放入用户 B 或用户 C 的购物车内,这不属于同一个会话。
基本的原理如图
二、cookie 操作
对 cookie 的操作包括如下
注意,cookie 多数时候由服务器端创建,JS 也可以创建 cookie,但 HttpOnly 类型的 JS 无法创建。
浏览器提供的 cookie API (document.cookie)实在过于简陋,可以稍封装下,如以下采用setter/getter方式 cookie 函数就方便了许多
/* * JS 写cookie和读cookie操作 * * **取cookie** * cookie(name) * * **写cookie** * cookie(name, value) * cookie(name, value, option) */ var cookie = function(name, value, option) { var doc = document if (value != undefined) { // set option = option || {} if (value === null) { value = '' option.expires = -1 } var expires = '' if (option.expires && (typeof option.expires == 'number' || option.expires.toUTCString)) { var date = new Date if (typeof option.expires == 'number') { date.setTime(date.getTime() + (option.expires * 24 * 60 * 60 * 1000)) } else { date = option.expires } // for IE expires = '; expires=' + date.toUTCString() } var path = option.path ? '; path=' + option.path : '' var domain = option.domain ? '; domain=' + option.domain : '' var secure = option.secure ? '; secure' : '' doc.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('') } else { // get var cookieValue = null if (doc.cookie && doc.cookie != '') { var cookies = doc.cookie.split(';') for (var i = 0; i < cookies.length; i++) { var cookie = $.trim(cookies[i]).split('=') if ( cookie[0] == name && cookie.length > 1 ) { try { cookieValue = decodeURIComponent(cookie[1]) } catch(e) { cookieValue = cookie[1] } break } } } return cookieValue } };
当然,还有更方便的 https://github.com/florian/cookie.js,提供了更多便捷函数。
三、cookie 类型
比如,在新浪云上测试页面:http://snandy.sinaapp.com/php/cookie.php,我种了 3 个 cookie,分别是 c1, c2, c3
$d1 = mktime(1,1,1,1,1,2018); // 普通cookie setcookie("c1", "Jack", $d1); // 安全的cookie,仅https,第6个参数 setcookie("c2", "John", $d1, NULL, NULL, TRUE); // HttpOnly cookie 第7个参数 setcookie("c3", "Resig", $d1, NULL, NULL, NULL, TRUE);
用 Firefox 访问
我种的三个都有,saeut是新浪云种的。
在 firebug 控制台输入 document.cookie
可以看到,c2,c3 都是访问不到的。c2 是 安全的cookie,需要在https协议下访问,c3 则是 httpOnly 的,JS无法访问,这个需要注意。
把访问协议改成 https: https://snandy.sinaapp.com/php/cookie.php,firebug 切换到控制台再输入 document.cookie,可以看到 c2 就可以访问了
四、cookie 的坑
1. Cookie 太大或数量过多时页面访问报错,比如会出现如下提示因此站点的 cookie 需要管理,不能随意种 cookie。另外尽量指定path,将cookie限定在指定范围内。
网站 browsercookielimits.squawky.net ,记录了各浏览器 cookie 大小
2. 保存中文时需要Unicode编码(encodeURIComponent),否则存的是乱码

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

"L'état de la connexion dans le message du journal des événements indique Veille : Déconnectée en raison de la conformité de la carte réseau. Cela signifie que le système est en mode veille et que la carte d'interface réseau (NIC) a été déconnectée. Bien qu'il s'agisse généralement d'un problème de réseau, il peut peut également être causé par des conflits logiciels et matériels. Dans la discussion suivante, nous explorerons comment résoudre ce problème « Quelles sont les causes de la déconnexion de la connexion en veille ? » Conformité de la carte réseau ? Si vous voyez le message « ConnectivityStatusinStandby:DisConnected,Reason:NICCompliance » dans l'Observateur d'événements Windows, cela indique qu'il peut y avoir un problème avec votre carte réseau ou votre contrôleur d'interface réseau. Cette situation est généralement

Momo, une plateforme sociale bien connue, offre aux utilisateurs une multitude de services fonctionnels pour leurs interactions sociales quotidiennes. Sur Momo, les utilisateurs peuvent facilement partager leur statut de vie, se faire des amis, discuter, etc. Parmi eux, la fonction de configuration du statut permet aux utilisateurs de montrer leur humeur et leur statut actuels aux autres, attirant ainsi l'attention et la communication d'un plus grand nombre de personnes. Alors, comment définir votre propre statut Momo ? Ce qui suit vous donnera une introduction détaillée ! Comment définir le statut sur Momo ? 1. Ouvrez Momo, cliquez sur Plus dans le coin inférieur droit, recherchez et cliquez sur Statut quotidien. 2. Sélectionnez le statut. 3. L'état du réglage s'affichera.

Comprendre la signification du code d'état HTTP 301 : scénarios d'application courants de redirection de pages Web Avec le développement rapide d'Internet, les exigences des utilisateurs en matière d'interaction avec les pages Web sont de plus en plus élevées. Dans le domaine de la conception Web, la redirection de pages Web est une technologie courante et importante, mise en œuvre via le code d'état HTTP 301. Cet article explorera la signification du code d'état HTTP 301 et les scénarios d'application courants dans la redirection de pages Web. Le code d'état HTTP 301 fait référence à une redirection permanente (PermanentRedirect). Lorsque le serveur reçoit le message du client

Compréhension approfondie des cinq états des threads Java et de leurs règles de conversion 1. Introduction aux cinq états des threads En Java, le cycle de vie d'un thread peut être divisé en cinq états différents, dont l'état nouveau (NEW) et l'état prêt. (RUNNABLE), l'état d'exécution (RUNNING), l'état de blocage (BLOCKED) et l'état de fin (TERMINATED). Nouvel état (NEW) : lorsque l'objet thread est créé, il est dans le nouvel état. À ce stade, l'objet thread a alloué suffisamment de ressources pour effectuer la tâche.

Comment implémenter le streaming HTTP en C++ ? Créez un socket de flux SSL à l'aide de Boost.Asio et de la bibliothèque client asiohttps. Connectez-vous au serveur et envoyez une requête HTTP. Recevez les en-têtes de réponse HTTP et imprimez-les. Reçoit le corps de la réponse HTTP et l'imprime.

Comment partitionner la gestion des disques Avec le développement continu de la technologie informatique, la gestion des disques est devenue un élément indispensable de notre utilisation informatique. En tant qu'élément important de la gestion des disques, le partitionnement de disque peut diviser un disque dur en plusieurs parties, nous permettant ainsi de stocker et de gérer les données de manière plus flexible. Alors, comment partitionner la gestion des disques ? Ci-dessous, je vais vous donner une introduction détaillée. Tout d’abord, nous devons préciser qu’il n’existe pas qu’une seule façon de partitionner les disques. Nous pouvons choisir de manière flexible la méthode de partitionnement de disque appropriée en fonction des différents besoins et objectifs. souvent

Comment ajouter et gérer des utilisateurs dans Google Manager ? Google Chrome permet à plusieurs utilisateurs de se connecter, nous n'avons donc pas à nous soucier de la connexion sur plusieurs appareils. Si nous avons de nombreux utilisateurs, nous devons ajouter une gestion. Certains amis ne savent peut-être pas comment fonctionner. Ne vous inquiétez pas, l'éditeur a compilé aujourd'hui un tutoriel détaillé étape par étape pour tout le monde. Si vous êtes intéressé, venez jeter un œil avec l'éditeur. Instructions détaillées du didacticiel étape par étape 1. Après avoir allumé l'ordinateur, recherchez l'icône Google Chrome installée sur le bureau et double-cliquez pour l'ouvrir, comme indiqué dans l'image ci-dessous. 2. Cliquez sur l'icône à trois points dans le coin supérieur droit de Google Chrome, comme indiqué dans l'image ci-dessous. 3. Cliquez sur l'option [Paramètres] dans le menu déroulant de Google Chrome, comme indiqué dans la figure ci-dessous. 4. Dans l'interface des paramètres de Google Chrome qui s'ouvre, cliquez sur [Gérer les ch

Solution : 1. Réessayez : vous pouvez attendre un certain temps et réessayer, ou actualiser la page ; 2. Vérifiez la charge du serveur : vérifiez l'utilisation du processeur, de la mémoire et du disque du serveur. Si la limite de capacité est dépassée, vous pouvez essayer. pour optimiser la configuration du serveur ou augmenter la capacité. 3. Vérifiez la maintenance et les mises à niveau du serveur : vous ne pouvez attendre que le serveur revienne à la normale. 4. Vérifiez la connexion réseau : assurez-vous que la connexion réseau est stable, vérifiez si le réseau est actif. les paramètres du périphérique, du pare-feu ou du proxy sont corrects ; 5. Assurez-vous que la configuration du cache ou du CDN est correcte ; 6. Contactez l'administrateur du serveur, etc.
