Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erklärung zur Verwendung von Session in PHP

Detaillierte Erklärung zur Verwendung von Session in PHP

jacklove
Freigeben: 2023-03-27 11:40:01
Original
1504 Leute haben es durchsucht

Beim Erlernen von PHP werden Sie auf Caching-Probleme stoßen. In diesem Artikel werden die relevanten Inhalte ausführlich erläutert.

Deklaration und Verwendung von Session

Sitzungseinstellungen unterscheiden sich von Cookies und müssen zuerst gestartet werden. Session_start() muss in PHP aufgerufen werden. Das Syntaxformat der Funktion session_start() lautet wie folgt:

Bool session_start(void) //Eine Sitzung erstellen, eine Sitzung starten und die Sitzung initialisieren

Hinweis: Es darf keine geben Ausgabe vor der Funktion session_start()

Wenn Sie die Website zum ersten Mal besuchen, erstellt die Funktion Seesion_start() eine eindeutige Sitzungs-ID und speichert die Sitzungs-ID automatisch über den HTTP-Antwortheader im Client-Cookie. Gleichzeitig wird auf der Serverseite auch eine nach der Sitzungs-ID benannte Datei erstellt, um die Sitzungsinformationen des Benutzers zu speichern. Wenn derselbe Benutzer diese Website erneut besucht, wird die im Cookie gespeicherte Seesion-ID automatisch über den HTTP-Anforderungsheader übertragen. Zu diesem Zeitpunkt weist die Funktion Session_start() keine neue Sitzungs-ID zu, sondern durchsucht die Festplatte des Servers Suchen Sie auf der Festplatte nach einer Sitzungsdatei mit demselben Namen wie die Sitzungs-ID, lesen Sie die zuvor für diesen Benutzer gespeicherten Sitzungsinformationen aus und wenden Sie sie im aktuellen Skript an, um den Zweck der Verfolgung dieses Benutzers zu erreichen. Die Sitzung wird in Form eines Arrays verwendet, z. B.: $_SESSION['Sitzungsname']

Registrieren Sie eine Sitzungsvariable und lesen Sie Sitzung

Verwenden Sie Sitzungsvariablen in PHP zusätzlich zum Starten , Es gibt auch einen Registrierungsprozess. Die Registrierung und das Lesen von Sitzungsvariablen werden durch Zugriff auf das Array $_SESSION abgeschlossen. Für Schlüsselnamen im assoziativen Array $_SESSION gelten dieselben Benennungsregeln wie für gewöhnliche Variablen in PHP. Der Code zum Registrieren von Sitzungsvariablen lautet wie folgt:

Der Code lautet wie folgt

//启动session的初始化
session_start();
//注册session变量,赋值为一个用户的名称
$_SESSION["username"]="skygao";
//注册session变量,赋值为一个用户的ID
$_SESSION["uid"]=1;
>
Nach dem Login kopieren

Nach der Ausführung des Skripts werden die beiden Sitzungsvariablen in einer Datei auf der Serverseite gespeichert der Datei erfolgt über die Datei php.ini in dem durch das Attribut session.save_path angegebenen Verzeichnis.

Registrierung von Variablen aufheben und Sitzung zerstören

Wenn eine Sitzungsvariable aufgebraucht ist, kann sie gelöscht werden, und wenn eine Sitzung abgeschlossen ist, kann sie auch zerstört werden. Wenn sich der Benutzer vom Websystem abmeldet, muss ihm eine Abmeldefunktion zur Verfügung gestellt werden und alle seine Informationen werden auf dem Server zerstört. Um alle Daten im Zusammenhang mit der aktuellen Sitzung zu zerstören, können Sie die Funktion session_destroy() aufrufen, um die aktuelle Sitzung zu beenden und alle Ressourcen in der Sitzung zu löschen. Das Syntaxformat dieser Funktion lautet wie folgt:

bool session_destroy(void) // Alle Daten im Zusammenhang mit der aktuellen Sitzung zerstören

Diese Funktion gibt keine Variablen im Zusammenhang mit der aktuellen Sitzung frei Die im Client-Cookie gespeicherte Session

ID wird nicht gelöscht. Da das $_SESSION-Array und das benutzerdefinierte Array gleich verwendet werden, können wir die Funktion unset() verwenden, um eine einzelne in der Sitzung registrierte Variable freizugeben. Wie unten gezeigt:

unset($_SESSION['key name']);

Achten Sie darauf, unset($_SESSION) nicht zum Löschen des gesamten $_SESSION-Arrays zu verwenden, da es sonst nicht gelöscht wird Übergeben Sie die registrierten Variablen des Super-Global-Arrays $_SESSION länger. Wenn Sie jedoch alle von einem Benutzer in der Sitzung registrierten Variablen löschen möchten, können Sie die Array-Variable $_SESSION direkt einem leeren Array zuweisen. Wie unten gezeigt:

$_SESSION=array()

PHPs Standardsitzung basiert auf Cookies, und die Sitzung

ID wird vom Server im Cookie des Clients gespeichert. Wenn Sie sich also von der Sitzung abmelden, müssen Sie auch die im Cookie gespeicherte Sitzungs-ID löschen. Dies muss mithilfe der Funktion setCookie () erfolgen. In einem PHP-Skript kann der Sitzungsname durch Aufrufen der Funktion session_name() abgerufen werden. Löschen Sie die im Client-Cookie gespeicherte Sitzungs-

Der Code lautet wie folgt:

Der Code lautet wie folgt

//Bestimmen Sie, ob die Sitzungs-ID

< 🎜 existiert im Cookie. >if(isset($_COOKIE[session_name()])){

//Löschen Sie das Cookie, das die Sitzungs-ID enthält in php.ini

setcookie(session_name(),'',time()-3600,'/');

}

>

Aus der vorherigen Einführung lässt sich schließen, dass der Sitzungsabmeldevorgang insgesamt 4 Schritte erfordert. Im folgenden Beispiel wird der vollständige vierstufige Code bereitgestellt. Durch die Ausführung des Skripts wird die Sitzung geschlossen und alle mit dieser Sitzung verbundenen Ressourcen zerstört. Der Code lautet wie folgt:

Der Code lautet wie folgt

//第一步:开启Session并初始化
session_start();
//第二部:删除所有Session的变量,也可以用unset($_SESSION[XXX])逐个删除
$_SESSION = array();
//第三部:如果使用基于Cookie的session,使用setCookkie()删除包含Session ID的cookie
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(), "", time()-42000, "/");
}
Nach dem Login kopieren

//Teil 4: Zerstöre die Sitzung schließlich vollständig

session_destroy();
>
session的phpini配置选项
php.ini文件和Session有关的几个常用配置选项:
session.auto_start = 0 ; 在请求启动时初始化session
session.cache_expire = 180 ; 设置缓存中的会话文档在 n 分钟后过时
session.cookie_lifetime = 0 ; 设置按秒记的cookie的保存时间,相当于设置Session的过期时间,为0时表示直到浏览器被重启
Nach dem Login kopieren

session.auto_start=1, also gibt es Die Sitzung muss nicht jedes Mal verwendet werden. Es wird nicht empfohlen, session_start() vorher aufzurufen. Es gibt jedoch einige Einschränkungen beim Aktivieren dieser Option. Wenn session.auto_start tatsächlich aktiviert ist, können Sie keine Objekte in die Sitzung einfügen, da dies in der Klassendefinition erforderlich ist vor dem Start der Sitzung geladen werden, um im Sitzungsobjekt neu erstellt zu werden.

session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.name = PHPSESSID; 用在cookie里的session的名字
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = /tmp ; 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.
session.use_cookies = 1 ; 是否使用cookies
Nach dem Login kopieren

Der automatische Speicherbereinigungsmechanismus der Sitzung

可以通过session_destroy()函数在页面中提供一个“退出”按钮,通过单击销毁本次会话。但如果用户没有单击退出按钮,而是直接关闭浏览器,或断网等情况,在服务器端保存的Session文件是不会删除的。虽然关闭浏览器,下次需要重新分配一个新的Session ID重新登录,但这只是因为在php.ini中的设置seesion.cookie_lifetime=0,来设定Session ID在客户端Cookie中的有效限期,以秒为单位指定了发送到浏览器的Cookie的生命周期。当系统赋予Session有效期限后不管浏览器是否开启,Session ID都会自动消失。而客户端Session ID消失服务器端保存的Session文件并没有被删除。所以没有被Sessoin ID引用的服务器端Session文件,就成为了“垃圾”。

服务器保存的Session文件就是一个普通文本文件,所以都会有文件修改时间。“垃圾回收程序”启动后就是根据Session文件的修改时间,将所有过期的Session文件全部删除。通过在php.ini中设置session.gc_maxlifetime选项来指定一个时间(单位:秒),例如设置该选项值为1440(24分钟)。“垃圾回收程序”就会在所有Session文件中排查,如果有修改时间距离当前系统时间大于1440秒的就将其删除。

“session垃圾回收程序”是怎样的启动机制呢“垃圾回收程序”是在调用session_start()函数时启动的。而一个网站有多个脚本,没有脚本又都要使用session_start()函数开启会话,又会有很多个用户同时访问,这就很可能session_start()函数在1秒内被调用N次,而如果每次都会启动“session垃圾回收程序”,这样是很不合理的。可以通过php.ini文件中修改“session.gc_probability和session.gc_pisor”两个选项,设置启动垃圾回收程序的概率。会根据“session.gc_probability/session.gc_pisor”公示计算概率,例如选项session.gc_probability=1,而选项session.gc_pisor=100,这样的概率就是“1/100”,即session_start()函数被调用100次才会有一次可能启动“垃圾回收程序”。

php.ini中相关的配置

session.cookie_lifetime=0; 关闭浏览器相应的cookie文件即被删除
session.gc_maxlifetime; 设置过期session时间,默认1440秒(24分钟)
session.gc_probability/session.gc_pisor; 启动垃圾回收机制的概率(建议值为1/1000——5000)
Nach dem Login kopieren

cookie禁用时通过URL传递session的ID

使用Session跟踪一个用户,是通过在各个页面之间传递唯一的Session ID,并通过Session ID提取这个用户在服务器中保存的Session变量。常见的Session ID传送方法有以下两种。

第一种方法是基于cookie的方式传递session ID,这种方式更优,但不总是可用, 因为用户在客户端可以屏蔽cokie;

第二种方法是通过url参数进行传递,直接将session ID嵌入到URL中去。

在Session的实现中通常都是采用Cookie的方式,客户端保存的Session ID就是一个Cookie。当客户禁用Cookie时,Session ID就不能在Cookie中保存,也就不能在页面之间传递,此时Session失效。不过PHP5在Linux平台可以自动检查Cookie状态,如果客户端禁用它,则系统自动把Session ID附加到URL上传送。而使用Windows系统作为Web服务器则无此功能。

在PHP中提出了跟踪Session的另一种机制,如果客户浏览器不支持Cookie,则PHP可以重写客户请求的URL,把Session ID添加到URL信息中。可以手动地在每个超链接的URL中都加上一个Session ID,但工作量比较大,不建议使用这种方法。如下所示:

代码如下

//开启session

session_start();

//在每个URL后面附加上参数,变量名为session_name()获取名称,值通过session_id()获取

echo '连接演示';

>

在使用Linux系统做服务器时,则在编辑PHP时如果使用了–enable-trans-sid配置选项,和运行时选项session.use_trans_sid都被激活,在客户端禁用Cookie时,相对URL将被自动修改为包含会话ID。如果没有这么配置,或者使用Windows系统作为服务器时,可以使用常量SID。该常量在会话启动时被定义,如果客户端没有发送适当的会话Cookie,则SID的格式为session_name=session_id,否则就为一个空字符串。因此可以无条件地将其嵌入到URL中去。在下例中使用两个脚本程序,演示了Session ID的传送方法。

session_start();
$_SESSION["username"]="admin";
echo "session ID:".session_id()."
";
Nach dem Login kopieren

本篇详解了session的相关问题,更多相关知识请关注php中文网。

相关推荐:

php中die(),exit(),return的区别介绍

SQL 中 on 条件与 where 条件的区别

关于php 压缩CSS代码的方法

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung zur Verwendung von Session in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage