Dieser Artikel wird Ihnen eine Lösung für die PHP5-Notizen (COOKIE und SESSION) (gemeinsam genutzt) vorstellen. Ich hoffe, dass er für alle hilfreich ist.
1. Das HTTP-Protokoll selbst ist zustandslos.
Wir alle verlassen uns beim Surfen im Internet auf das HTTP-Protokoll zur Übermittlung von Informationen. Wenn wir beispielsweise die URL www.bokee.com in den Browser eingeben und die Eingabetaste drücken, wird die URL zu: http://www.bokee.com. Der Grund dafür ist, dass die Webseite, die Sie durchsuchen, lautet basierend auf dem http-Protokoll. Das http-Protokoll kann weder aufzeichnen, welche Websites der Benutzer häufig besucht, welche Hobbys er hat, noch kann es die Benutzerkonto-ID und das Kennwort aufzeichnen. Dies ist die sogenannte Zustandslosigkeit des HTTP-Protokolls. Das HTTP-Protokoll selbst ist zustandslos, was dem ursprünglichen Zweck des HTTP-Protokolls entspricht. Der Client muss lediglich den Server auffordern, bestimmte Dateien herunterzuladen Anfragen sind alle unabhängig, genau wie die Beziehung zwischen einem Kunden und einem Verkaufsautomaten oder einem gewöhnlichen (Nicht-Mitglieds-)Hypermarkt. Wenn Sie sie erkennen, werden sie Sie definitiv nicht erkennen.
2. Wie sind Cookie und Sitzung zu verstehen?
Da Cookies und Sitzungen eng miteinander verbunden sind, stellen wir sie hier gemeinsam vor.
Als ich zum Beispiel in Henan war, ging ich oft in einen Feinkostladen, um gefräßige Enten zu kaufen. Um den Verkauf zu fördern, gab der Ladenbesitzer eine Sonderaktion heraus: „Alle 10 gekauften Enten werden kostenlos verschenkt.“ . Außer bei Hochzeiten und Beerdigungen zu Hause würde doch niemand 10 gebratene Enten auf einmal kaufen, oder? Der Chef muss sich also eine Möglichkeit überlegen, den Verbrauch des Kunden zu erfassen. Hier gibt es drei Möglichkeiten:
Ⅰ Der Chef merkt sich die Verbrauchsmenge jedes Kunden und gibt dem Kunden automatisch eine, wenn er oder sie 10 Stück verbraucht. Dies ist wie das HTTP-Protokoll selbst, das zustandsbehaftet ist und sich an das AktivitätenVerhalten des Kunden erinnern kann. Leider kann das http-Protokoll selbst aus verschiedenen Gründen nicht zustandsbehaftet sein und der Chef selbst verfügt nicht über ein so außergewöhnliches Gedächtnis, sodass diese Lösung nicht funktioniert!
ⅡDer Chef stellt dem Kunden eine Punktekarte aus, die die Menge des Verbrauchs aufzeichnet und in der Regel ein Ablaufdatum hat. Wenn der Kunde jedes Mal beim Kauf von gebratener Ente diese Karte vorzeigt, weiß der Chef, dass der Kunde den Laden schon einmal besucht hat. Dieser Ansatz besteht darin, den Zustand auf der Clientseite aufrechtzuerhalten, beispielsweise durch die Cookie-Technologie. Öffnen Sie (Windows-System) C:Dokumente und Einstellungen, Benutzername-Cookies. Dort finden Sie einige kleine Dateien im *.txt-Format, bei denen es sich um „Punktekarten“ (Cookies) handelt, die Ihnen von einigen Websites beim Durchsuchen gesendet werden.
Ⅲ. Der Chef stellt dem Kunden eine Mitgliedskarte aus und erfasst keine Informationen außer der Kartennummer. Wenn der Kunde beim Kauf von Entenbraten die Karte vorzeigt, wird der Chef aus dem Verzeichnis des Geschäfts entfernt und Ihre Kartennummer ermitteln und 1 Punkt hinzufügen. Dieser Ansatz besteht darin, den Status auf der Serverseite aufrechtzuerhalten.
Es ist wie Sitzungstechnologie.
Der größte Unterschied zwischen einem Cookie und einer Sitzung besteht darin, dass ein Cookie eine Punktekarte an den Kunden sendet, die alle Verbrauchsinformationen des Kunden aufzeichnet. Session stellt dem Kunden eine Punktekarte nur mit der Kartennummer (Session-ID) aus und zeichnet alle Verbrauchsinformationen des Kunden auf. Cookies werden auf der Clientseite gespeichert, Sitzungen werden auf der Clientseite gespeichert. Sie sind normalerweise auch eine kleine Cookie-Datei, da diese kleine Datei nichts außer der Sitzungs-ID enthält Nummer), es ist besser als ein Cookie. Viel sicherer.
3. Wofür werden Cookies und Sitzungen verwendet?
Für die allgemeine Nutzung, wie zum Beispiel das Herunterladen von Dingen von einigen Websites, müssen sich Mitglieder zuerst anmelden. Das http-Protokoll selbst ist zustandslos und es gibt keine Möglichkeit herauszufinden, ob sich der Kunde angemeldet hat. Was soll ich tun? Sie können es durch Cookies und Sitzungen erkennen. Ein weiteres Beispiel ist das Online-Shopping. Woher weiß der Warenkorb, welche Produkte der Kunde ausgewählt hat? Cookies und Sitzungen können ebenfalls protokolliert werden. Alles in allem sind Cookies und Sitzungen Technologien, die den Kundenstatus aufzeichnen können. Obwohl es sich um unterschiedliche Technologien handelt, können dies auch Sitzungen tun, solange Cookies dies können.
COOKIE
1. Was sind Cookies?
0Cookie-Technologie ist eine sehr kontroverse Technologie. Seit ihrer Einführung ist sie für die Mehrheit der Netzwerkbenutzer in den Fokus der Debatte geraten. Einige Internetnutzer, darunter auch einige hochrangige Webexperten, sind mit der Erstellung und Förderung unzufrieden. Dies liegt nicht daran, dass die Funktionalität der Cookie-Technologie zu schwach ist oder weil sie aus anderen Gründen der technischen Leistung geschuldet sind, sondern einfach, weil sie der Meinung sind, dass die Verwendung von Cookies schädlich ist auf die Privatsphäre der Netzwerkbenutzer. Da es sich bei einem Cookie um eine kleine Textdatei handelt, die vom Webserver im Browser des Benutzers gespeichert wird, enthält es Informationen über den Benutzer (z. B. eine Identifikationsnummer, ein Passwort, die Art und Weise, wie der Benutzer auf der Website einkauft oder wie oft der Benutzer dies tut). besucht die Seite).
Was genau ist Cookie-Technologie? Schadet es wirklich der Privatsphäre der Internetnutzer? Lassen Sie uns den folgenden Inhalt lesen, bevor wir antworten.
In der Geschichte der Entwicklung der WEB-Technologie ist das Aufkommen der Cookie-Technologie eine große Veränderung. Zunächst führte Netscape die Cookie-Technologie in seinem Netscape Navigator-Browser ein. Seitdem hat die World Wide Web Association damit begonnen, den Cookie-Standard zu unterstützen. Später, nachdem die Cookie-Technologie von Microsoft energisch gefördert wurde (da die vom IIS-Webserver von Microsoft verwendete ASP-Technologie zu einem großen Teil die Cookie-Technologie verwendet), wird sie im Internet Explorer-Browser vollständig unterstützt. Bisher unterstützt die überwiegende Mehrheit der Browser die Cookie-Technologie oder ist zumindest mit der Nutzung der Cookie-Technologie kompatibel.
Gemäß der Definition in der offiziellen Dokumentation von Netscape sind Cookies eine Möglichkeit für Server oder Skripte, Informationen auf Client-Workstations unter dem HTTP-Protokoll zu verwalten. Cookies sind kleine Dateien, die vom Webserver im Browser des Benutzers gespeichert werden und Informationen über den Benutzer enthalten können (z. B. Identifikationsnummer, Passwort, Art und Weise, wie der Benutzer auf der Website einkauft oder wie oft der Benutzer die Website besucht). Immer wenn ein Benutzer eine Verbindung zum Server herstellt, kann die Website auf die Cookie-Informationen zugreifen.
Wenn Sie ein Windows-System verwenden, öffnen Sie bitte C:Dokumente und Einstellungen, Benutzername-Cookies. Sie werden feststellen, dass sich in diesem Verzeichnis viele kleine Dateien im *.txt-Format befinden. Das ist die Cookie-Datei. Natürlich kann es sein, dass Sie in diesem Verzeichnis nichts finden, weil Sie das System neu installiert haben, noch nie im Internet gesurft haben oder weil Ihr Browser Cookies deaktiviert hat. Sonst wird in diesem Verzeichnis immer etwas sein.
Laienhaft ausgedrückt: Browser verwenden eine oder mehrere begrenzte Dateien, um Cookies zu unterstützen. Diese Dateien werden auf Computern mit Windows-Betriebssystemen als Cookie-Dateien und auf Macintosh-Computern als magische Cookie-Dateien bezeichnet. Diese Dateien werden von Websites verwendet, um Cookie-Daten darauf zu speichern. Websites können Informationen in diese Cookie-Dateien einfügen, was für einige Internetnutzer Nebenwirkungen haben kann. Einige Benutzer glauben, dass dies einen Eingriff in die Privatsphäre darstellt. Schlimmer noch: Manche glauben, dass Cookies einen Eingriff in den persönlichen Bereich darstellen und ein Sicherheitsrisiko für die Computer der Benutzer darstellen können.
Derzeit sind einige Cookies temporär und andere dauerhaft. Temporäre Cookies werden nur für einen bestimmten Zeitraum im Browser gespeichert. Nach Ablauf des angegebenen Zeitraums wird das Cookie vom System gelöscht. Beispielsweise werden in PHP Cookies verwendet, um den Benutzerfortschritt zu verfolgen, bis der Benutzer die Website verlässt. Ein dauerhaftes Cookie wird in der Cookie-Datei des Benutzers gespeichert und kann bei der nächsten Rückkehr des Benutzers immer noch aufgerufen werden.
Speichern Sie Cookies in Cookie-Dateien. Einige Benutzer werden übermäßig denken, dass dies große Probleme verursachen wird. Der Hauptgrund besteht darin, dass einige Benutzer befürchten, dass Cookies die Online-Surfgewohnheiten der Benutzer verfolgen, z. B. welche Arten von Websites Benutzer gerne besuchen und an welchen Aktivitäten sie gerne teilnehmen. Ich befürchte, dass, sobald diese Art von persönlichen Informationen mit Hintergedanken in die Hände einiger Menschen gelangen, diese Person zum Ziel einer Menge Werbemüll werden oder sogar unerwarteten Schaden erleiden könnte. Diese Sorge wird jedoch überhaupt nicht auftreten, da Benutzer außerhalb der Website keine Cookie-Informationen auf der gesamten Website erhalten können. Daher ist es nicht möglich, Cookies für diesen Zweck zu verwenden. Aufgrund der Missverständnisse und „falschen Gerüchte“ einiger Benutzer bleibt einigen Browser-Entwicklern jedoch keine andere Wahl, als entsprechend zu reagieren (so bieten beispielsweise Netscape Navigator 4.0 und Internet Explorer 3.0 beide die Möglichkeit, Cookies zu blockieren). Ich persönlich bin der Meinung, dass es bei Website-Programmierern keine strengen Überlegungen gibt. Diese Mängel reichen jedoch nicht aus, um die hervorragenden Eigenschaften von Cookies zu vertuschen Benutze sie. Das Ergebnis des so langen Wartens auf die Cookie-Technologie ist, dass viele Browserentwickler gezwungen sind, eine flexible Kontrolle über Cookies in ihren Browsern bereitzustellen. Beispielsweise gehen die beiden aktuellen Mainstream-Browser Netscape Navigator und Internet Explorer auf diese Weise mit Cookies um: Netscape Navigator 4.0 kann Cookies nicht nur zur Warnung akzeptieren, sondern auch Cookies blockieren. 0 können Sie nur Warnungen akzeptieren, ohne Blockierungsoptionen bereitzustellen. In aktualisierten Versionen nach Internet Explorer 4.0 wurde jedoch die Option zum Blockieren von Cookies hinzugefügt.
Darüber hinaus können viele der neuesten Technologien Cookies sogar in Browsern blockieren, die keine Cookies blockieren können. Sie können beispielsweise die Verwendung von Cookies einschränken, indem Sie Cookie-Dateien auf unterschiedliche Typen festlegen. Wenn Sie jedoch Cookies vollständig blockieren möchten, werden Sie viele Seiten Ihrer Website definitiv ablehnen. Denn heutzutage haben sich viele Website-Entwickler in die leistungsstarken Funktionen der Cookie-Technologie verliebt. Beispielsweise kann die Verwendung von Sitzungsobjekten nicht von der Unterstützung von Cookies getrennt werden.
2. Wie funktioniert Cookie?
Wenn ein Kunde eine Website besucht, die auf PHP-Technologie basiert, können Sie die setcookie-Funktion in PHP verwenden, um ein Cookie zu generieren. Nach der Verarbeitung sendet das System das Cookie an den Kunden und speichert es im Verzeichnis „C:Dokumente und Einstellungen“ mit Benutzername „Cookies“. . Cookies sind Teil der HTTP-Header, daher muss die Funktion setcookie aufgerufen werden, bevor etwas an den Browser gesendet wird. Diese Einschränkung ist dieselbe wie bei der Funktion header() (wenn Sie die Funktion head() verstehen müssen, überprüfen Sie sie bitte selbst). Wenn der Kunde die Website erneut besucht, sendet der Browser automatisch das der Website entsprechende Cookie im Verzeichnis „Benutzername Cookies“ von C:Dokumente und Einstellungen an den Server, und der Server konvertiert das vom Client übergebene Cookie automatisch in eine PHP-Variable. In PHP5 werden vom Client gesendete Cookies in globale Variablen umgewandelt. Sie können es über $_COOKIE[‘xxx’] lesen.
Obwohl es auch heute noch einige Internetnutzer gibt, die über Cookies streiten, neigt die überwiegende Mehrheit der Internetnutzer immer noch dazu, Cookies zu akzeptieren. Daher können wir die Cookie-Technologie sicher zur Entwicklung unserer WEB-Seiten verwenden.
3. Allgemeine Cookie-Funktionen
● SetCookie Die Funktion erstellt ein Cookie und hängt es an das Ende des HTTP-Headers. Zu beachten ist, dass Cookie Teil des HTTP-Protokoll-Headers ist und zum Übertragen von Informationen zwischen dem Browser und dem Server verwendet wird. Daher muss die SetCookie-Funktion vor allen Inhalten aufgerufen werden, die zur HTML-Datei selbst gehören wird ausgegeben. Auch vor dem Aufruf dieser Funktion funktioniert es nicht, wenn Leerzeichen oder Leerzeilen vorhanden sind. Wenn setCookie() das zweite Element erkennt, traut sich kein Element, das erste Element zu erkennen. Voraussetzung für die Verwendung der Funktion setcookie() ist, dass der Browser des Clients Cookies unterstützt. Wenn der Client sie deaktiviert, ist setcookie() nutzlos.
int SetCookie(String-Name, String-Wert, Int-Ablauf, String-Pfad, String-Domäne, Int Secure, Bool httponly);
Parameterbeschreibung:
Name; Legen Sie den Namen der Cookie-Variablen fest.
Wert;Legen Sie den Cookie-Wert fest.
ablaufen;Cookie-Ablaufzeit festlegen. Wenn Sie das Cookie als Browserprozess speichern möchten, wird es nach dem Schließen des Browsers ungültig. Dann können Sie die Ablaufzeit direkt auf 0 setzen. ZB:setcookie("name","value",0). Wenn dieser Parameter nicht gesetzt ist, kann auch das Schließen des Browsers dazu führen, dass ein Cookie beendet wird.
Pfad: stellt das Verzeichnis auf dem Webserver dar, das standardmäßig das Verzeichnis ist, in dem sich die aufgerufene Seite befindet. Hier gibt es noch etwas zu beachten: Ihre Website verfügt beispielsweise über mehrere verschiedene Verzeichnisse (z. B. ein Einkaufsverzeichnis, ein Forum-Verzeichnis) Wenn Sie nur Cookies ohne Pfad verwenden, können die auf einer Seite in einem Verzeichnis gesetzten Cookies nicht auf einer Seite in einem anderen Verzeichnis angezeigt werden. Mit anderen Worten: Cookies sind pfadorientiert. Selbst wenn der Pfad nicht angegeben ist, übergibt der WEB-Server automatisch den aktuellen Pfad an den Browser, und die Angabe des Pfads zwingt den Server, den festgelegten Pfad zu verwenden. Die Lösung dieses Problems besteht darin, beim Aufruf von SetCookie den Pfad und den Domänennamen hinzuzufügen. Das Format des Domänennamens kann „http://www.phpuser.com/“ oder „.phpuser.com“ sein. Der Teil, der den Wert in der SetCookie-Funktion darstellt, wird bei der Übergabe automatisch codiert. Das heißt, wenn der Wert von value bei der Übergabe „test value“ lautet, wird er zu „test%20value“, was dasselbe ist als URL-Methode. Dies ist für das Programm natürlich transparent, da PHP den Cookie-Wert beim Empfang automatisch dekodiert.
Domäne: Der Domänenname, den das Cookie verwenden kann. Standardmäßig ist der Domänenname der aufgerufenen Seite. Der Domänenname muss zwei „.“ enthalten. Wenn Sie also Ihren Top-Level-Domänennamen angeben, müssen Sie „.mydomain.com“ verwenden. Nach dem Festlegen eines Domänennamens muss der Domänenname für den Zugriff auf die Website verwendet werden, damit das Cookie gültig ist. Wenn Sie für den Zugriff auf diese Seite mehrere Domänennamen verwenden, kann dieses Feld leer sein oder die Domänennamen, die auf dieses Cookie zugreifen, befinden sich alle unter derselben Domäne.
sicher: Wenn auf „1“ gesetzt, bedeutet dies, dass das Cookie nur von Servern gespeichert werden kann, die der Browser des Benutzers als sicher erachtet.
Alle Parameter außer Name sind optional. Die drei Parameter Wert, Pfad und Domäne können durch die leere Zeichenfolge „“ ersetzt werden, was darauf hinweist, dass es keine Einstellung gibt. Die Ablauf- und Sicherheitsparameter sind numerisch und können durch 0 dargestellt werden. Der Expire-Parameter ist ein Standard-Unix-Zeitstempel, der mit der Funktion time() oder mktime() in Sekunden abgerufen werden kann. Der sichere Parameter gibt an, ob dieses Cookie über das verschlüsselte HTTPS-Protokoll über das Netzwerk übertragen wird.
httponly: Wenn der Wert auf 1 gesetzt ist, bedeutet dies, dass das Cookie nur vom http-Protokoll verwendet werden kann. Jede Skriptsprache, wie z. B. Javascript, kann das von PHP erstellte Cookie nicht abrufen, was den Angriff von XSS effektiv abschwächt. (Hinweis: Dies ist eine Option, die nur in PHP5 verfügbar ist, und ich habe sie nie verwendet. Ich habe versucht, sie zu übersetzen, nachdem ich das offizielle Handbuch gelesen hatte. Wenn Sie Fragen haben, lesen Sie bitte das offizielle Handbuch.) Die aktuell gesetzten Cookies tun dies nicht sofort wirksam, aber Sie müssen bis zur nächsten Seite warten oder aktualisieren, um es anzuzeigen. Dies liegt daran, dass das Cookie vom Server an den Browser des Clients auf der eingestellten Seite übergeben wird und der Browser das Cookie entfernen kann Erst nach der nächsten Seite oder Aktualisierung wird der Grund an den Server zurückgegeben. Weinrebe
16-jähriger deutscher Student hat Hotmail durch Cookies geknackt
Adriaan Graas, ein 16-jähriger deutscher Student, interessiert sich sehr für Netzwerksicherheit und Webentwicklung. Er hat auch einen Weg entdeckt, Hotmail zu knacken. Heute, mehr als eine Woche später, hat Microsoft die Sicherheitslücke immer noch nicht behoben.
Die Idee dieses kleinen Hackers ist sehr einfach. Wenn sich ein Benutzer bei Hotmail anmeldet, generiert das System ein Cookie, um die nächste Anmeldung zu erleichtern. Da das Cookie nicht an eine IP gebunden ist, können Hacker diese Cookies fälschen und zum Anmelden verwenden, ohne das Passwort oder die E-Mail-Adresse des Opfers zu kennen. Über XSS können Hacker einen Teil des Javascript-Codes einfügen und mithilfe des Protokollskripts Cookies an einen Webserver senden. Das Skript kann in PHP, ASP, CGI und anderen Sprachen geschrieben werden.
Cookie-Anwendungsfall:
●Erstellen Sie ein Cookie:
SetCookie()
●Erstellen Sie ein Cookie-Array:
Eins:
SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[] ", "Value 2");
Zweitens:
SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");
● Cookies empfangen und verarbeiten
PHP unterstützt den Empfang und die Verarbeitung von Cookies sehr gut. Es funktioniert vollständig automatisch und hat das gleiche Prinzip wie GET- und POST-Variablen.
Wenn Sie beispielsweise ein Cookie mit dem Namen MyCookier setzen, analysiert PHP es automatisch aus dem vom WEB-Server empfangenen HTTP-Header und bildet eine direkt verwendbare globale Variable mit dem Namen $_COOKIE['MyCookie']. Wert des Cookies. Dasselbe gilt auch für Arrays.
Beispiele sind wie folgt: (vorausgesetzt, diese wurden auf den vorherigen Seiten festgelegt und sind noch gültig)
echo $_COOKIE[‘MyCookie’]
Beispiel für das Herausnehmen eines Cookie-Arrays:
// 创建一个cookie数组 setcookie("cookie[three]", "cookiethree"); setcookie("cookie[two]", "cookietwo"); setcookie("cookie[one]", "cookieone"); // 页面刷新之后,用foreach提取cookie数组。 if (isset($_COOKIE['cookie'])) { foreach ($_COOKIE['cookie'] as $name => $value) { echo "$name : $value <br />\n"; } }
So einfach ist das.
●Cookie löschen
Um ein vorhandenes Cookie zu löschen, gibt es zwei Möglichkeiten:
1. Rufen Sie SetCookie nur mit dem Namensparameter auf, dann wird das Cookie mit diesem Namen vom zugehörigen Computer gelöscht;
setcookie („MyCookie“); ; //MyCookie löschen.
2. Setzen Sie die Cookie-Ablaufzeit auf time() oder time()-1//Es spielt keine Rolle, um wie viel time() reduziert wird, solange es sich um die Ablaufzeit handelt//Dann wird das Cookie danach gelöscht Durchsuchen dieser Seite (tatsächlich ist es fehlgeschlagen). Zum Beispiel:
setcookie("MyCookie","Value",time()-1); //Delete MyCookie.
Es ist zu beachten, dass beim Löschen eines Cookies dessen Wert auf der aktuellen Seite weiterhin gültig ist.
Wenn Sie das Cookie als Browserprozess speichern möchten, wird es nach dem Schließen des Browsers ungültig. Dann können Sie die Ablaufzeit direkt auf 0 setzen. Zum Beispiel: setcookie("name","value",0). Wenn dieser Parameter nicht gesetzt ist, kann auch das Schließen des Browsers dazu führen, dass ein Cookie beendet wird.
Cookie-Hinweise
1. Es kann keine HTML-Ausgabe vor SetCookie() erfolgen. Kein Element erkennt das erste, auch keine Leerzeichen und Leerzeilen.
2. Nach SetCookie() erfolgt keine Ausgabe, wenn Sie echo $_COOKIE["name"] auf der aktuellen Seite aufrufen. Sie müssen die Seite aktualisieren oder zur nächsten Seite gehen, um den Cookie-Wert anzuzeigen. Der Grund ist einfach. Nachdem SetCookie() ausgeführt wurde, wird ein Cookie an den Client gesendet. Wenn Sie die nächste Seite nicht aktualisieren oder durchsuchen, wie kann der Client das Cookie an Sie zurücksenden? Nachdem der Browser ein Cookie erstellt hat, enthält jede Anfrage an die Website das Cookie im Header. Das Cookie wird jedoch niemals an Anfragen von anderen Websites gesendet. Und der Browser sendet es so lange, bis das Cookie abläuft.
3. Einschränkungen bei der Verwendung von Cookies. Die maximale Anzahl von Cookies, die von einem Browser erstellt werden können, beträgt 30, und jedes Cookie darf 4 KB nicht überschreiten. Die Gesamtzahl der Cookies, die von jeder WEB-Site gesetzt werden können, darf 20 nicht überschreiten. (Das habe ich im Buch gelesen. Es sollte sein, dass eine Website nicht mehr als 30 Cookies erstellen kann. Andernfalls befinden sich Hunderte von Cookies auf meinem Computer. Bitte geben Sie mir einen Rat!)
4. Cookies Es wird gespeichert Wenn der Benutzer Cookies deaktiviert, haben Ihre Cookies natürlich keine Wirkung! Wenn wir in aktuellen Browsern ein Cookie an den Client senden, fängt dieser es wie ein Watchdog ab und fragt den Benutzer, ob er die Eingabe des Cookies zulassen soll. Gott, Benutzer sind keine Experten. Wie viele Leute wissen, was Cookies sind? Vielleicht wird es als Virus behandelt und ausgeschlossen.
SESSION
1. Was ist Sitzung?
Die chinesische Übersetzung von Session heißt „Konversation“. Seine ursprüngliche Bedeutung bezieht sich auf eine Reihe von Aktionen/Nachrichten, die einen Anfang und ein Ende haben, zum Beispiel beim Tätigen eines Telefonanrufs, der Reihe von Vorgängen ab dem Abheben des Telefons Vom Wählen bis zum Auflegen des Telefons kann eine Sitzung aufgerufen werden. Das aktuelle Verständnis von Sitzungen in der Gesellschaft ist sehr verwirrend: Manchmal können wir die Worte „Während einer Browsersitzung …“ sehen, wobei sich die Sitzung auf den Zeitraum vom Öffnen bis zum Schließen eines Browserfensters bezieht. Sie können auch sehen, wann Wenn man sich auf den Satz „der Benutzer (Client) während einer Sitzung“ bezieht, kann er sich auf eine Reihe von Aktionen des Benutzers beziehen (normalerweise eine Reihe von Aktionen im Zusammenhang mit einem bestimmten Zweck, z. B. vom Anmelden über den Kauf von Waren bis zum Auschecken). Ein solcher Online-Einkaufsprozess bezieht sich jedoch manchmal nur auf eine Verbindung. Der Unterschied kann jedoch nur aus dem Kontext abgeleitet werden . Es impliziert zwei Bedeutungen: „verbindungsorientiert“ und/oder „zustandserhaltend“. „Verbindungsorientiert“ bedeutet, dass die kommunizierenden Parteien zunächst einen Kommunikationskanal aufbauen müssen, bevor sie kommunizieren, z. B. einen Anruf tätigen, bis die andere Partei antwortet „Status behalten“ bedeutet, dass der kommunizierende Teilnehmer eine Reihe von Nachrichten zuordnen kann, sodass die Nachrichten voneinander abhängen können. Beispielsweise kann ein Kellner einen alten Kunden erkennen, der wiederkommt, und sich daran erinnern, dass der Kunde ihm Geld schuldet Letztes Mal speichern. Beispiele für diese Kategorie sind „eine TCP-Sitzung“ oder „eine POP3-Sitzung“.
Angesichts dieser Verwirrung ist es schwierig, einen einheitlichen Standard für die Definition von Sitzungen zu haben Wir können es jedoch so verstehen: Wenn wir beispielsweise einen Anruf tätigen, bleibt das Telefon von dem Moment an, in dem wir den Anruf tätigen, bis zu dem Moment, in dem wir auflegen, verbunden, also wir Dies Der verbundene Zustand wird als Sitzung bezeichnet. Es handelt sich um eine öffentliche Variable, die während der Interaktion zwischen dem Besucher und der gesamten Website immer vorhanden ist. Um die Genauigkeit und Sicherheit der Daten zu gewährleisten, ist die SESSION-Variable vorhanden Wird den Besuchern der Website eine eindeutige Kennung zugewiesen, die sogenannte Sitzungs-ID. Sie wird entweder im Cookie des Clients gespeichert oder über die URL weitergeleitet. Die Erfindung von SESSION überwindet die Einschränkungen des HTTP-Protokolls Das Protokoll gilt als zustandsloses Protokoll und kann nicht abgerufen werden. Nachdem die Antwort auf dem Server abgeschlossen ist, verliert der Server den Kontakt zum Browser. Dies entspricht dem ursprünglichen Zweck des HTTP-Protokolls Wenn Sie bestimmte Dateien herunterladen, müssen weder der Client noch der Server das bisherige Verhalten des anderen aufzeichnen, genau wie die Beziehung zwischen einem Kunden und einem normalen (Nicht-Mitglieds-)Hypermarkt Die relevanten Informationen des Benutzers werden über SESSION aufgezeichnet (Cookie ist eine andere Lösung), sodass der Benutzer diese Identität erneut bestätigen kann, wenn er eine Anfrage an den Webserver stellt. Die Erfindung der Sitzung ermöglicht es einem Benutzer, zwischen mehreren Seiten zu wechseln . Alle Website-Programmierer haben diese Erfahrung gemacht. Die Variablen auf jeder Seite können nicht auf der nächsten Seite verwendet werden (obwohl Formular und URL ebenfalls implementiert werden können, dies sind jedoch sehr unbefriedigende Methoden), während die in SESSION registrierten Variablen als global verwendet werden können Variable. Was nützt SESSION also? Jeder hat beim Online-Einkauf schon einmal den Warenkorb verwendet. Sie können die von Ihnen ausgewählten Produkte jederzeit in den Warenkorb legen und schließlich zur Kasse gehen. Während des gesamten Prozesses dient der Warenkorb zur vorübergehenden Speicherung der Aktivitäten
des Benutzers. Er kann zur Benutzeridentität verwendet werden Authentifizierung und Programmstatusaufzeichnung, Übergabe von Parametern zwischen Seiten usw. Die Implementierung von SESSION verwendet die COOKIE-Technologie. Auf der Clientseite wird ein COOKIE mit der Sitzungs-ID (SESSION-Nummer) gespeichert. Andere Sitzungsvariablen wie Sitzungsname usw. werden auf der Serverseite gespeichert. Wenn der Benutzer den Server anfordert, wird auch die Sitzungs-ID an den Server gesendet. Durch Extrahieren der auf der Serverseite gespeicherten Variablen können Sie den Benutzer identifizieren. Gleichzeitig ist es nicht schwer zu verstehen, warum SESSION manchmal fehlschlägt.
当客户端禁用COOKIE时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过php5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能。
2、Session常见函数及用法?
●Session_start():开始一个会话或者返回已经存在的会话。
说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误:
Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………
你可以在php.ini里启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。
请求结束后所有注册的变量都会被序列化。已注册但未定义的变量被标记为未定义。在之后的访问中这些变量也未被会话模块定义,除非用户以后定义它们。
警告: 有些类型的数据不能被序列化因此也就不能保存在会话中。包括 resource 变量或者有循环引用的对象(即某对象将一个指向自己的引用传递给另一个对象)。
●注册SESSION变量 :
PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。
注意:session_register(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle设为on,不过出于安全考虑,强烈建议关闭register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建议用$_SESSION代替之。例如:
Page1.php
Session_start(); //使用SESSION前必须调用该函数。 $_SESSION[‘name’]=”我是黑旋风李逵!”; //注册一个SESSION变量 $_SESSION[‘passwd’]=”mynameislikui”; $_SESSION[‘time’]=time(); echo '<br /><a href="page2.php">通过COOKIE传递SESSION</a>'; //如果客户端支持cookie,可通过该链接传递session到下一页。 echo '<br /><a href="page2.php?' . SID . '">通过URL传递SESSION</a>';//客户端不支持cookie时,使用该办法传递session. ?> Page2.php <?php session_start(); echo $_SESSION['name']; // echo $_SESSION['passwd']; // echo date('Y m d H:i:s', $_SESSION['time']); echo '<br /><a href="page1.php">返回山一页</a>';
有两种方法传递一个会话 ID:
cookie
URL 参数
会话模块支持这两种方法。cookie 更优化,但由于不总是可用,也提供替代的方法。第二种方法直接将会话 ID 嵌入到 URL 中间去。
PHP 可以透明地转换连接。除非是使用 PHP 4.2 或更新版本,需要手工在编译 PHP 时激活。在 Unix 下,用 --enable-trans-sid 配置选项。如果此配置选项和运行时选项 session.use_trans_sid 都被激活(修改php.ini),相对 URI 将被自动修改为包含会话 ID。
●session_id
session_id() 用于设定或取得当前session_id。php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。
如果session_id()有具体指定值的话,将取代当前的session_id值。使用该函数前必须启动会话:session_start();
当我们使用session cookies时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。不论当前session_id是否与指定值相等。
session_id()如果没有指定值,则返回当前session_id();当前会话没有启动的话,则返回空字符串。
●检查session是否存在?
在以往的php版本中通常使用session_is_register()检查session是否存在,如果您使用$_SESSION[‘XXX’]=XXX来注册会话变量,则session_is_register()函数不再起作用。你可以使用
isset($_SESSION[‘xxx’])来替代。
● 更改session_id session_regenerate_id() 更改成功则返回true,失败则返回false。
使用该函数可以为当前session更改session_id,但不改变当前session的其他信息。例如:
<?php session_start(); $old_sessionid = session_id(); session_regenerate_id(); $new_sessionid = session_id(); echo "原始 SessionID: $old_sessionid<br />"; echo "新的 SessionID: $new_sessionid<br />"; echo"<pre class="brush:php;toolbar:false">"; print_r($_SESSION); echo""; ?>
●session_name()返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id.
session改名示例:
<?php $previous_name = session_name("WebsiteID"); echo "新的session名为: $previous_name<br />"; ?>
●如何删除session?
1、unset ($_SESSION['xxx'])删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。 session_unregister()在PHP5中不再使用,可将之打入冷宫。
unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量。
2、$_SESSION=array()删除多个session
3、session_destroy()结束当前的会话,并清空会话中的所有资源。。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
返回值:布尔值。
功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true
session_unset() 如果使用了$_SESSION,则该函数不再起作用。由于PHP5必定要使用$_SESSION,所以此函数可以打入冷宫了。
下面是PHP官方关于删除session的案例:
<?php // 初始化session. session_start(); /*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/ $_SESSION = array(); /***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/ if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最后彻底销毁session. session_destroy(); ?>
由此我们可以得出删除Session的步骤:
①session_start()
②$_SESSION=array()/unset($_SESSION['xxx'])
③session_destroy()
● SESSION-Sicherheit:
Das Sitzungsmodul kann nicht garantieren, dass die in der Sitzung gespeicherten Informationen nur für den Benutzer sichtbar sind, der die Sitzung erstellt hat. Abhängig von den darin enthaltenen Daten müssen weitere Schritte unternommen werden, um die Integrität der Sitzung proaktiv zu schützen.
Die Auswertung der innerhalb einer Sitzung übertragenen Daten und die Implementierung zusätzlicher Schutzmaßnahmen ist oft mit Kosten verbunden und verringert den Benutzerkomfort. Wenn Sie Benutzer beispielsweise vor einfachen sozialen Richtlinien schützen möchten (Hinweis: Die in der URL angezeigte Sitzungs-ID wird von anderen auf dem Computerbildschirm gesehen oder von anderen Websites über HTTP Referrer usw. abgerufen), sollten Sie sie aktivieren . session.use_only_cookies. In diesem Fall muss der Client Cookies unbedingt aktivieren, sonst funktioniert die Sitzung nicht.
Es gibt mehrere Möglichkeiten, bestehende Sitzungs-IDs an Dritte weiterzugeben. Eine durchgesickerte Sitzungs-ID ermöglicht einem Dritten den Zugriff auf alle mit der angegebenen ID verknüpften Ressourcen. Erstens trägt die URL die Sitzungs-ID. Wenn Sie eine Verbindung zu einer externen Site herstellen, wird die URL mit der Sitzungs-ID möglicherweise im Referrer-Protokoll der externen Site gespeichert. Zweitens kann ein aktiverer Angreifer Pakete im Netzwerksegment abhören. Wenn sie unverschlüsselt ist, wird die Sitzungs-ID im Klartext über das Netzwerk übertragen. Die Lösung hierfür besteht darin, SSL auf dem Server zu implementieren und Benutzer zu dessen Verwendung zu zwingen.
Standardmäßig werden alle Daten, die sich auf eine bestimmte Sitzung beziehen, in einer Datei in dem Verzeichnis gespeichert, das durch die INI-Option session.save_path angegeben wird. Für jede Sitzung wird eine Datei erstellt (unabhängig davon, ob dieser Sitzung Daten zugeordnet sind). Dies liegt daran, dass bei jedem Öffnen einer Sitzung eine Datei erstellt wird, unabhängig davon, ob Daten in die Datei geschrieben werden. Beachten Sie, dass dieses Verhalten aufgrund der Einschränkungen bei der Arbeit mit dem Dateisystem einen Nebeneffekt hat, der dazu führen kann, dass benutzerspezifische Sitzungshandler (z. B. die Verwendung von Datenbank) Sitzungen ohne gespeicherte Daten verlieren.
Die oben vorgestellten Funktionen werden im Folgenden verwendet, es werden jedoch auch einige sitzungsbezogene Funktionen vorgestellt:
session_encode
Funktionsfunktion: Codierung der Sitzungsinformationen
Funktionsprototyp: string session_encode(void);
Rückgabewert: string
Funktion Beschreibung: Die zurückgegebene Zeichenfolge enthält den Namen und den Wert jeder Variablen in der globalen Variablen in der Form: a|s:12:"it is a test";c|s:4:"lala"; ist eine Variable. Der Name s: 12 repräsentiert den Wert der Variablen a „es ist ein Test. Die Länge beträgt 12. Die Variablen werden durch Semikolon „;“ getrennt.
session_decode
Funktionsfunktion: Sitzungsinformationsdekodierung
Funktionsprototyp: boolean session_decode (String-Daten)
Rückgabewert: Boolescher Wert
Funktionsbeschreibung: Diese Funktion kann die Sitzungsinformationen dekodieren und bei Erfolg den logischen Wert „true“ zurückgeben
PHP5 verwendet nicht mehr session_id, sondern wandelt sie in eine konstante SID um und speichert sie im Cookie, wenn Der Client deaktiviert Cookies. PHP leitet die SID automatisch über die URL weiter und die Bedingung besteht darin, session.use_trans_sid = 1 in php.ini festzulegen. Zu diesem Zeitpunkt spielt es keine Rolle, ob der Client Cookies deaktiviert.
Verwenden Sie strip_tags (), um die SID auszugeben, um XSS-bezogene Angriffe zu vermeiden
Session跨页传递问题:
session跨页传递需要考虑三种情况:
①客户端禁用了cookie。
②浏览器出现问题,暂时无法存取cookie
③php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?下面解释一下原因:
Session文件分为两部分:session变量保存在服务器端(默认以文件方式存储session);而session id则以cookie形式保存在客户端。(注意:session默认是基于cookie的)。
当用户的浏览器向服务器提出请求时,同时发送包含session id的cookie(默认情况下)。服务器根据客户端提供的session id来得到用户的文件,即保存在服务器端的session变量值。事实上,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。
PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是 session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,其一:“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”;其二:运行PHP的服务器必须是unix/linux系统,windows不具备此项功能。
明白了以上的道理,我们就可以得出解决session跨页传递问题的三条途径:
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
下面举例说明:
第一种情况:
page1.php
<?php session_start(); $_SESSION['var1']="中华人民共和国"; $url="<a href="."\"s2.php\">下一页</a>"; echo $url; ?> page2.php <?php session_start(); echo "传递的session变量var1的值为:".$_SESSION['var1']; ?>
运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。
现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”,又得到结果“中华人民共和国”
第二种途径:
s1.php
<?php session_start(); $_SESSION['var1']="中华人民共和国"; $sn = session_id(); $url="<a href="."\"s2.php?s=".$sn."\">下一页</a>"; //PHP5定义了一个常量SID来表示session_id(),$url还可以写成$url='<a href="page2.php?' . SID . '">下一页</a>'; echo $url; ?> s2.php <?php session_id($_GET['s']); session_start(); echo "传递的session变量var1的值为:".$_SESSION['var1']; ?>
第三种途径:
login.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=??????"> </head> <body> 请登录: <form name="login" method="post" action="mylogin1.php"> 用户名:<input type="text" name="name"><br> 口 令:<input type="password" name="pass"><br> <input type="submit" value="登录"> </form> </body> </html> mylogin1.php <?php $name=$_POST['name']; $pass=$_POST['pass']; if(!$name || !$pass) { echo "用户名或密码为空,请<a href=\"login.html\">重新登录</a>"; die(); } if (!($name=="laogong" && $pass=="123")) { echo "用户名或密码不正确,请<a href=\"login.html\">重新登录</a>"; die(); } //注册用户 ob_start(); session_start(); $_SESSION['user']= $name; $psid=session_id(); $fp=fopen("e:\\tmp\\phpsid.txt","w+"); fwrite($fp,$psid); fclose($fp); //身份验证成功,进行相关操作 echo "已登录<br>"; echo "<a href=\"mylogin2.php\">下一页</a>"; ?> mylogin2.php <?php $fp=fopen("e:\\tmp\\phpsid.txt","r"); $sid=fread($fp,1024); fclose($fp); session_id($sid); session_start(); if(isset($_SESSION['user']) && $_SESSION['user']="laogong" ) { echo "已登录!"; } else { //成功登录进行相关操作 echo "未登录,无权访问";
推荐学习:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonEin Trick zum Lösen von PHP5-Notizen (COOKIE und SESSION) (teilen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!