Heim > Artikel > Backend-Entwicklung > PHP-Grundlagen-Tutorial, siebzehn Sitzungstechnologie, COOKIE, SESSION
Wenn wir PHP zum Entwickeln des Backends verwenden, müssen wir einige Daten speichern, und unser üblicher Ansatz besteht darin Speicherung der Datenbank, aber manchmal müssen wir sie nicht in der Datenbank speichern. Wenn wir uns beispielsweise auf der Webseite anmelden, wird auf der Website die Zeit unseres letzten Besuchs angezeigt Der Besuch muss nicht in der Datenbank gespeichert werden. Nach der Anmeldung auf einer bestimmten Webseite müssen wir diese nicht in der Datenbank speichern, sondern verwenden die Sitzungstechnologie in PHP um es zu lösen.
Die Cookie-Technologie und die Sitzungstechnologie von PHP gelten beide für Sitzungen. Die Sitzung kann hier so verstanden werden, dass ein Benutzer einen Browser öffnet und eine Website besucht. Vom Zeitpunkt des Zugriffs des Benutzers auf die Website bis zum Ende, wenn der Benutzer die Website-Seite schließt, nennen wir es eine Sitzung. Während einer Sitzung kann ein Benutzer mehrmals auf verschiedene Hyperlinks auf den Seiten der Website klicken.
Wenn wir eine Website und die Seiten innerhalb der Website besuchen, starten wir die Website. Es ist nur eine Sitzung.
Manchmal können wir beim Besuch einer Website auf der Webseite sehen, wann wir die aktuelle Website zuletzt besucht haben, sobald wir die Website betreten viele. Diese Zeit kann durch Cookies gespeichert werden.
Cookie ist eine clientseitige Technologie. Der Server schreibt die Daten jedes Benutzers in Form eines Cookies in den jeweiligen Browser. Wenn Benutzer über einen Browser auf Webressourcen auf dem Server zugreifen, bringen sie ihre eigenen Daten mit. Auf diese Weise verarbeiten die Webressourcen die eigenen Daten des Benutzers. Beachten Sie, dass es sich bei der Cookie-Technologie um eine Datei handelt, die auf der Browserseite geschrieben wird. Dabei werden Cookies in Form von Schlüssel-Wert-Paaren gespeichert.
Wie aus dem Flussdiagramm oben ersichtlich ist, kapselt der Server die Informationen zur Cookie-Erstellung in den Antwortheader von, wenn ein Cookie in der PHP-Datei des Servers erstellt werden soll Das http-Protokoll: Um Informationen zu übertragen, analysiert der Browser den Antwortheader. Er weiß, dass der Server ein Cookie im Browser erstellen muss, und erstellt lokal eine Cookie-Datei anhand der Informationen im Antwortheader Wenn Sie die Website erneut aufrufen, werden lokale Cookie-Informationen an den Server gesendet.
Cookie:user=abc; PHPSESSID=v6ntsa42f4v0h5jpaoa1tot8r6
Unter der Verwendung von Cookies versteht man einfach den Vorgang des Hinzufügens, Löschens, Änderns und Überprüfens von Cookies.
Cookies erstellen ist eigentlich sehr einfach
<?php //通过setcookie函数进行cookie的创建 setcookie('username','abc',time()+3600);
Wir erstellen Cookies über die Funktion setcookie(), und das Cookie wird es tun im Cache des Browsers gespeichert werden.
Set-Cookie:username=abc; expires=Mon, 17-Oct-2016 08:55:51 GMT; Max-Age=3600
setcookie(parameter 1, Parameter 2, Parameter 3) Wir können im Code sehen, dass in dieser Funktion drei Parameter übergeben werden,
Der erste Parameter ist der Name des Schlüssels zum Speichern der Informationen.
Der zweite Parameter ist der Wert, der dem Schlüssel entspricht
Der dritte Parameter ist die Zeit, zu der dieses Cookie gespeichert wird, und die hier gespeicherte Zeit ist der aktuelle Wert. Addieren Sie 3600 Sekunden zur Zeit. Wenn diese Zeit überschritten wird, läuft das Cookie ab.
Wenn wir mit der Ausführung des obigen Codes fertig sind, können wir die erstellte Cookie-Datei in der Cache-Datei des Browsers sehen, die unsere gespeicherten Daten enthält.
username abc www.lijiafei.com/test3/ 1536 2120470400 30550100 480638768 30550092 *
Oben haben wir die Daten gespeichert. Der Zweck des Speicherns der Daten besteht darin, die Daten auszulesen und das Cookie auslesen zu können Verstanden als:
Wenn der Browser gemäß dem http-Protokoll eine Seite einer Website anfordert, sendet der Browser die Cookie-Informationen der Website über die http-Anfrage an den Server Beim Anfordern der Seite
empfängt der Server die Cookie-Informationen, sie werden in das $_COOKIE-Array gekapselt.
Wir lesen aus dem $_COOKIE-Array.
<?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
Wenn wir auf die Datei zugreifen, werden die Cookie-Informationen über den Anforderungsheader weitergeleitet.
Cookie:user=abc; username=abc; PHPSESSID=v6ntsa42f4v0h5jpaoa1tot8r6
Wenn wir den Wert eines Cookies ändern möchten, verwenden wir immer noch setcookie, um die Änderung abzuschließen, aber Wenn das Cookie nicht vorhanden ist, erstellen Sie es. Wenn es bereits vorhanden ist, ändern Sie es.
<?php //通过setcookie函数进行修改,但是如果浏览器没有cookie则进行创建。 setcookie('username','abc123',time() + 1600);
Wenn wir den Wert des Cookies lesen, können wir sehen, dass der darin enthaltene Wert erfolgreich geändert wurde.
array(3) { ["user"]=> string(3) "abc" ["username"]=> string(6) "abc123" ["PHPSESSID"]=> string(26) "v6ntsa42f4v0h5jpaoa1tot8r6" } abc123
Wenn wir das Cookie nicht mehr verwenden können, können wir den Cookie-Wert manuell vernichten.
Das Löschen von Cookie-Daten kann als zwei Schritte verstanden werden: 1. Löschen der im Browser-Cache gespeicherten Cookie-Datei, 2. Löschen der im $_COOKIE-Array auf dem Server gespeicherten Daten.
<?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);
Wir können alle Cookie-Informationen löschen, indem wir den obigen Code ausführen.
Die oben genannten sind die grundlegendsten Funktionen von Cookies. Aber es gibt noch viele Dinge, auf die wir achten müssen:
一个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机制。
Stellen Sie am Ende des Skripts zunächst fest, ob der Sitzungsmechanismus geschlossen ist. Wenn nicht, werden die Daten im Array $_SESSION in die Sitzungsdatei geschrieben.
Das Obige ist der Speichermechanismus der Sitzung. Das Verständnis und die Beherrschung des Speichermechanismus werden für uns bei der Verwendung der Sitzung sehr hilfreich sein.
Im obigen Speichermechanismus wissen wir, dass wir nach dem Öffnen des Sitzungsmechanismus im ersten Schritt beurteilen, welche Dateien ungültig sind, und dann Die Sitzung wird aktiviert. Der Garbage Collection-Mechanismus (GC) führt das Recycling durch, muss jedoch nicht jedes Mal recycelt werden, wenn er aktiviert wird. Tatsächlich gibt es in der Datei php.ini zwei Parameter, die die Wahrscheinlichkeit der Aktivierung von GC festlegen .
session.gc_probability
session.gc_pisor= 10000
Sie sind ein Paar, das heißt Wie hoch ist die Wahrscheinlichkeit der Garbage Collection? Die Berechnungsformel für die Wahrscheinlichkeit lautet session.gc_probability/session.gc_pisor = 1/10000. Das heißt, wenn die Funktion session_start() 10.000 Mal aufgerufen wird, wird der Garbage Collection-Mechanismus ausgelöst einmal.
Aber wir legen unterschiedliche Wahrscheinlichkeiten für verschiedene Websites fest, um zu vermeiden, dass GC häufig ausgelöst wird .
Die Sitzungstechnologien Cookie und Session werden in der PHP-Entwicklung immer noch häufig verwendet. Das Verständnis der unterschiedlichen Eigenschaften der beiden Technologien ermöglicht uns eine flexiblere Entwicklung unterschiedliche Daten speichern.
Das Obige ist der Inhalt der Sitzungstechnologie COOKIE und SESSION in PHP Basic Tutorial 17. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!