Table des matières
HTTP状态管理机制之Cookie,状态机制cookie
一、cookie 起源
二、cookie 操作
三、cookie 类型
四、cookie 的坑
Maison php教程 php手册 HTTP状态管理机制之Cookie,状态机制cookie

HTTP状态管理机制之Cookie,状态机制cookie

Jun 13, 2016 am 08:47 AM
cookie http 机制 状态 管理

HTTP状态管理机制之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 多数时候由服务器端创建,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
	}
};
Copier après la connexion

当然,还有更方便的 https://github.com/florian/cookie.js,提供了更多便捷函数。

  

比如,在新浪云上测试页面: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);
Copier après la connexion

用 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 就可以访问了

 

1. Cookie 太大或数量过多时页面访问报错,比如会出现如下提示

因此站点的 cookie 需要管理,不能随意种 cookie。另外尽量指定path,将cookie限定在指定范围内。

 

网站 browsercookielimits.squawky.net ,记录了各浏览器 cookie 大小

 

2. 保存中文时需要Unicode编码(encodeURIComponent),否则存的是乱码

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

État de la connexion en veille : Déconnecté, raison : Conformité de la carte réseau État de la connexion en veille : Déconnecté, raison : Conformité de la carte réseau Feb 19, 2024 pm 03:15 PM

"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

Comment définir le statut Momo Comment définir le statut Momo Mar 01, 2024 pm 12:10 PM

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 les scénarios d'application courants de redirection de pages Web et comprendre le code d'état HTTP 301 Comprendre les scénarios d'application courants de redirection de pages Web et comprendre le code d'état HTTP 301 Feb 18, 2024 pm 08:41 PM

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

Explication détaillée des cinq états des threads Java et des règles de transition d'état Explication détaillée des cinq états des threads Java et des règles de transition d'état Feb 19, 2024 pm 05:03 PM

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 utilisant C++ ? Comment implémenter le streaming HTTP en utilisant C++ ? May 31, 2024 am 11:06 AM

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 un disque Comment partitionner un disque Feb 25, 2024 pm 03:33 PM

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 Comment ajouter et gérer des utilisateurs dans Google Manager Sep 02, 2024 pm 02:41 PM

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

Comment résoudre l'erreur HTTP 503 Comment résoudre l'erreur HTTP 503 Mar 12, 2024 pm 03:25 PM

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.

See all articles