Was sind Sitzungen und Cookies?
Sitzung und Cookie sind eine Art Sitzungskontrolltechnologie. Wird häufig zur Identitätserkennung, Anmeldeüberprüfung, Datenübertragung usw. verwendet. Wenn wir zum Beispiel zum Bezahlen in den Supermarkt gehen, müssen wir unsere Mitgliedskarte zücken, um den Rabatt zu erhalten. Wie können wir zum jetzigen Zeitpunkt feststellen, dass diese Mitgliedskarte echt und gültig ist? Wenn wir dem Kassierer die Mitgliedsnummer geben, gibt der Kassierer sie anhand der von uns angegebenen Mitgliedsnummer in das System ein. Das System führt eine Abfrage anhand der Mitgliedsnummer durch. Wenn diese gefunden wird, wird nachgewiesen, dass die Mitgliedsnummer echt ist. Die Mitgliedsnummer ist hier wie ein Cookie und eine Sitzung. Das Mitgliedschaftssystem ist wie ein Server und der Kassierer ist wie ein Kunde.
Warum werden Sitzung und Cookie verwendet?
Anhand der obigen Beispiele wissen wir, was Sitzung und Cookie bewirken können. Warum müssen wir dies also verwenden, um dies zu erreichen? Hier ist es notwendig, die Eigenschaften des HTTP-Anwendungsübertragungsprotokolls zu verstehen. Da das HTTP-Protokoll zustandslos ist, fordert der Browser eine HTTP-Anfrage an. Wenn der Server die Anforderung empfängt, sendet er die vom Client benötigten Daten zurück Ein Verbundener. Wenn der Server jedoch Daten zurückgibt und der Client die Daten empfängt, wird ihre Verbindungsbeziehung getrennt. Wenn der Browser das nächste Mal eine Anfrage sendet, stellt er die Verbindung wieder her, und diese beiden Links haben nichts miteinander zu tun. Stellen Sie sich vor, wenn wir uns bei einem Einkaufszentrum anmelden, gehen wir zur Startseite und führen den Anmeldevorgang durch. Wenn wir jedoch eine Bestellung aufgeben oder etwas in den Warenkorb legen, müssen wir uns trotzdem anmelden. Wir müssen uns jedes Mal anmelden Wenn wir eine Seite besuchen, ist das nicht sehr umständlich und auch sehr unpraktisch: Wenn wir nach dem Hinzufügen eines Produkts zum Warenkorb klicken, um eine Bestellung aufzugeben, müssen wir uns auf der Bestellseite anmelden, was nicht möglich ist um die Produkte korrekt zu bewerten, wenn Sie die Bestellung aufgegeben haben.
HTTP-Funktionen
1 Das HTTP-Protokoll unterstützt den Client/Server-Modus und ist auch ein Anforderungs-/Antwortmodusprotokoll .
2. Keine Verbindung. Das sogenannte verbindungslose bedeutet, dass der Server die Verbindung trennt, nachdem er die Anfrage des Clients empfangen, die Antwort abgeschlossen und die Antwort des Clients empfangen hat. Beschränken Sie jede Verbindung auf die Verarbeitung nur einer Anfrage. Das spart Übertragungszeit.
3. Staatenlos. Das http-Protokoll verfügt über keine Speicherkapazität für die Transaktionsverarbeitung. Dies bedeutet, dass die vorherigen Informationen nur erneut übertragen werden können, wenn sie benötigt werden, was den Umfang der Datenübertragung erhöht. Diese Methode entlastet den Server in gewissem Maße, ist jedoch nicht förderlich für die Verbindung zwischen Client und Server. Um diesen Mangel auszugleichen, wurden zwei Technologien zur Aufzeichnung des HTTP-Status entwickelt, eine heißt Cookie und die andere heißt Session. Wir werden später ausführlicher darauf eingehen.
4. Einfach und schnell: Das sogenannte Einfach und Schnell bedeutet, dass der Client, wenn er einen Dienst vom Server anfordert, im Allgemeinen nur die Anforderungsmethode und den Zugriffspfad übermitteln muss
5. Flexibel: Damit ist hauptsächlich gemeint, dass der Client jede Art von Daten über das http-Protokoll übertragen kann. Wenn Sie beispielsweise JPG-Dateien, PPT-Dateien usw. übertragen, müssen Sie nur den zu übertragenden Inhaltstyp festlegen.
Cookie
Grundkonzept von Cookies
Cookie ist ein Mechanismus für Remote-Browser, um Daten zu speichern, um Benutzer zu verfolgen und zu identifizieren. Ein Cookie ist ein Datenelement, das auf dem Client gespeichert wird.
Cookie-Funktionsprinzip und Speichermechanismus
Funktionsprinzip
1. Der Client initiiert eine http-Anfrage an den Server.
2. Der Server gibt eine Anweisung zum Erstellen eines Cookies und antwortet dem Client.
3. Der Client erhält die Anweisung vom Server und erstellt gemäß der Anweisung ein Cookie auf dem Client.
4. Beim Blockieren der nächsten Anfrage trägt der Client dieses Cookie und sendet eine Anfrage an den Server.
Speichermechanismus
Im Allgemeinen werden Cookies gespeichert Auf dem Client gibt es drei Formen der Speicherung. Verschiedene Browser verfügen über unterschiedliche Speichermechanismen und unterschiedliche Cookies. Der Browser erstellt für verschiedene Domänen eine separate Datei im entsprechenden Verzeichnis auf der Festplatte, um den Cookie-Wert unter der Domäne zu speichern.
2. Dieses Cookie verschwindet, wenn der Browser geschlossen wird. Gemäß der folgenden Erstellungssyntax tritt diese Situation ein, wenn wir die Ablaufzeit nicht festlegen.
3.Flash-Speicher. Diese Speichermethode wird dauerhaft auf der Festplatte gespeichert. Auch wenn Sie einige Daten über den Browser löschen, können Sie die bei dieser Methode gespeicherten Cookies nicht löschen 🎜> Cookie-Einstellungen
Bool setcookie(string $name[, string $values, $expire=0[,string $path[,string $domain[, bool $secure = false[, bool $httpOnly = false]]]]] );
$values: Der im Cookie gespeicherte Wert. Hier ist zu beachten, dass der Client versucht, den Cookie-Wert zu löschen, wenn der Wert auf „false“ gesetzt ist. Wenn der Wert also „true“ oder „false“ sein soll, verwenden wir stattdessen einen anderen Wert, beispielsweise 1 für „true“. , ersetzen Sie false durch 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 序列号.
. 有时候,我们可能遇到这种情况,我们在这个页面设置了 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 的值唯一性和随机性.
. Gemäß dem Funktionsprinzip der Sitzung kann geschlossen werden, dass die Speicherung und Übertragung der Sitzung weiterhin vom Client abhängt PHPSESSID. Zu diesem Zeitpunkt können Sie eine URL-Umschreibung oder ein Formular zur Sitzungsübertragung durchführen. Gemäß der oben genannten Sitzungserstellung werden alle Sitzungen in einem Verzeichnis erstellt, einige ungültige Sitzungen jedoch nicht Wenn ein Server mit vielen Sites konfiguriert ist, werden zu diesem Zeitpunkt viele Sitzungsdateien generiert, wodurch sich unsere Lesegeschwindigkeit verlangsamt. Wir können die Speicherverzeichnisebene der Sitzung festlegen und save_path-Funktion. Im Allgemeinen können Sie bei großen Projekten (z. B. verteilten Projekten) andere Speichermethoden verwenden, z. B. Datenspeicherung und Speicherspeicherung
Der Unterschied zwischen Sitzung und Cookie. Die Sitzung wird auf der Serverseite gespeichert, das Cookie wird auf der Clientseite gespeichert.
.Anweisungen zur Cookie-Erstellung werden vom Server festgelegt. Die Sitzungs-ID von
.session muss auf der Client-Seite gespeichert werden.
Mehrere Missverständnisse zwischen Cookies und Sitzungen
Der Client verbietet Cookies und die Sitzung kann nicht verwendet werden?
Die Verwendung von URL-Umschreibung oder Formularübermittlung kann erreicht werden
Ist die Sitzungssicherheit auf der Clientseite sicherer?
Da Cookies auf der Clientseite vorhanden sind, ist die Sicherheit relativ gering, Sie können jedoch beim Erstellen den Wert $httpOnly festlegen.
Da Cookies und Sitzungen miteinander verknüpft sind, erhalten Sie einmal die Cookie hat die Sitzung bis zu einem gewissen Grad erworben, Sie können die Sitzung auch bedienen.
Verschwinden das Cookie und die Sitzung, wenn der Browser geschlossen wird?
Dazu ist eine Überprüfung des Speichermechanismus erforderlich. Cookies können in Dateien, im Speicher und im Flash gespeichert werden. Wenn sie im Speicher gespeichert sind, verschwinden sie aufgrund des Garbage-Collection-Mechanismus. Die Sitzung wird nicht gelöscht, wenn sie im Müll liegt Sammelmechanismus, es sei denn, der Löschvorgang ist in Ihrem Code angegeben.
Cookies werden auf dem Client gespeichert. Wie kann deren Sicherheit erhöht werden?
Wir können beim Setzen des Cookies einige spezielle Parameter hinzufügen, wie z. B. Client-Informationen, IP-Adresse, Browserinformationen usw.
Wenn das Cookie in der Datei des Clients gespeichert wird, gilt es für jeden Browser Ist der Betrieb auch dann möglich, wenn die Datei vom Server abgerufen wird?
Es hängt davon ab, ob der Cookie-Verwaltungsmechanismus zwischen den Browsern derselbe ist.
Verwandte Empfehlungen: „
PHP-TutorialDas obige ist der detaillierte Inhalt vonPHP muss Sitzungen und Cookies erwähnen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!