In den meisten Fällen verwenden wir die Standardeinstellung für die Ablaufzeit der Sitzung, aber in einigen Fällen mit besonderen Anforderungen können wir die Ablaufzeit der Sitzung festlegen.
Hierfür können Sie php.ini in PHP festlegen und session.gc_maxlifetime = 1440 # finden (PHP5-Standard ist 24 Minuten)
Hier können Sie die Ablaufzeit nach Belieben festlegen nach der Einstellung scheint es nicht zu funktionieren! /1000 bedeutet, dass alle 1000 Mal nur eine Sitzung recycelt wird.
Solange Ihr Besuchsvolumen groß ist, können Sie den Recyclingeffekt erzielen
session.gc_probability = 1 session.gc_divisor = 1000Zum Beispiel: session.gc_divisor = 1, was offensichtlich ist Sie können die Auswirkung des SESSION-Ablaufs sehen.
Die am häufigsten verwendete Einstellung befindet sich im PHP-Programm, wie im folgenden Beispielprogramm gezeigt:
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>Sitzung hat einen Ablaufmechanismus: session.gc_maxlifetime Es stellt sich heraus, dass der Sitzungsablauf ein Ereignis mit geringer Wahrscheinlichkeit ist. und session.gc_probability und session.gc_divisor werden verwendet, um die Wahrscheinlichkeit der Ausführung von gc in der Sitzung zu bestimmen. Die Standardwerte von session.gc_probability und session.gc_divisor sind 1 bzw. 100. sind Zähler und Nenner, sodass die Wahrscheinlichkeit, dass gc in der Sitzung ausgeführt wird, 1 % beträgt. Wenn Sie diese beiden Werte ändern, verringert sich die Effizienz von PHP. Dieser Ansatz ist also falsch! !
<?php unset($_SESSION['last_access']);// 或 $_SESSION['last_access']=''; ?>Daher kann das Ändern der Variable gc_maxlifetime in der Datei php.ini die Ablaufzeit der Sitzung verlängern: (Beispiel: Wir ändern die Ablaufzeit auf 86400 Sekunden)
session.gc_maxlifetime = 86400
Starten Sie dann neu Ein Webdienst (normalerweise Apache) reicht aus.
Wann findet Sitzungs-„Recycling“ statt:
Standardmäßig besteht für jede PHP-Anfrage eine Recyclingwahrscheinlichkeit von 1/100, sodass dies einfach als „alle 100 Mal“ verstanden werden kann Für die PHP-Anfrage ist eine Sammlung aufgetreten.“ Diese Wahrscheinlichkeit wird durch die folgenden Parameter gesteuert
session.gc_probability = 1 session.gc_divisor = 100
Hinweis 2: Wenn Ihre Sitzung session.save_path verwendet, um die Sitzung an anderer Stelle zu speichern, verarbeitet der Sitzungsrecyclingmechanismus möglicherweise nicht automatisch abgelaufene Sitzungsdateien. Zu diesem Zeitpunkt müssen Sie abgelaufene Sitzungen regelmäßig manuell (oder crontab) löschen:
Die Sitzung in PHP läuft nie abDas Programm nicht zu ändern ist der beste Weg, denn wenn Sie Ändern Sie das Programm, die Testabteilung muss sehr deprimiert sein, daher ist die einzige Möglichkeit, die Systemumgebungskonfiguration zu ändern, eigentlich sehr einfach. Öffnen Sie die Einstellungsdatei php.ini und ändern Sie die drei Zeilen wie folgt:cd /path/to/sessions; find -cmin +24 | xargs rm
1. session.use_cookies
Der Wert hierfür ist auf 1 gesetzt und Cookies werden zum Übergeben der Sitzungs-ID verwendet
2 session.cookie_lifetime
Dies stellt die Zeit dar, zu der die Sitzungs-ID gespeichert wird im Client-Cookie ist der Standardwert 0, was bedeutet, dass der Browser die SessionID schließt. Aus diesem Grund können PHP-Sitzungen nicht dauerhaft verwendet werden. Stellen wir es also auf eine Zahl ein, die wir für groß halten, wie wäre es mit 999999999, das ist in Ordnung! das ist alles.
3. session.gc_maxlifetime
Dies ist die Zeit, die die Sitzungsdaten auf der Serverseite gespeichert werden. Wenn diese Zeit überschritten wird, werden die Sitzungsdaten automatisch gelöscht! Stellen wir ihn also ebenfalls auf 99999999 ein.
Das war's, alles ist in Ordnung. Wenn Sie es nicht glauben, testen Sie es einfach und sehen Sie - richten Sie eine Sitzung ein und kommen Sie nach zehneinhalb Tagen wieder, um zu sehen, ob Ihr Computer nicht in Ordnung ist ausgeschaltet oder heruntergefahren ist, können Sie die Sitzungs-ID weiterhin sehen.
Natürlich ist es auch möglich, dass Sie nicht die Berechtigung haben, den Server zu steuern, und nicht so viel Glück haben wie ich, die php.ini-Einstellungen zu ändern. Natürlich können wir uns darauf verlassen , wir müssen den Client zum Speichern von Cookies verwenden, den Wert dieses Cookies festlegen und diesen Wert dann an die Funktion session_id() übergeben. Die spezifische Methode lautet wie folgt:
<?php session_start(); // 启动Session $_SESSION['count']; // 注册Session变量Count isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id(); // 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID $_SESSION['count']++; // 变量count加1 setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 echo $count; // 显示Session变量count的值 ?>Sitzungsfehler werden nicht weitergegeben
Schreiben wir zuerst eine PHP-Datei: 76a7362523f14d325042bbc57cd52892, und übergeben Sie es an den Server, um die Parameterkonfiguration des Servers anzuzeigen.
Dieser Parameter gibt an, ob die transparente SID-Unterstützung aktiviert werden soll, d. h. ob die Sitzung zusammen mit der URL übergeben wird. Nach meinem persönlichen Verständnis wird für jede URL eine Sitzung geöffnet, sobald dieser Parameter auf 0 gesetzt ist. Auf diese Weise können nachfolgende Seiten die Sitzung der vorherigen Seite nicht verfolgen, was wir als unzustellbar bezeichnen. Die beiden Seiten generieren zwei Sitzungsdateien auf der Serverseite und sind nicht miteinander verbunden. (Das genaue Prinzip muss hier bestätigt werden)
Eine Möglichkeit besteht also darin, den Wert von session.use_trans_sid in der Konfigurationsdatei php.ini auf 1 zu ändern.
Natürlich wissen wir, dass nicht jeder die Befugnis hat, die Konfiguration von PHP zu ändern. Was sind also die indirekten Lösungen?
Zwei Beispiele sollen zur Veranschaulichung dienen:
Datei 1 test1.php
<?php //表明是使用用户ID为标识的session session_id(SID); //启动session session_start(); //将session的name赋值为Havi $_SESSION['name']="Havi"; //输出session,并设置超链接到第二页test2.php echo "<a href="test2.php" rel="external nofollow" >".$_SESSION['name']."</a>"; ?>Datei 2: test2.php
<?php 表明是使用用户ID为标识的session session_id(SID); //启动session session_start(); //输出test1.php中传递的session。 echo "This is ".$_SESSION['name']; ?>
所以,重点是在session_start();前加上session_id(SID);,这样页面转换时,服务器使用的是用户保存在服务器session文件夹里的session,解决了传递的问题。
不过有朋友会反映说,这样一来,多个用户的session写在一个SID里了,那Session的价值就发挥不出来了。所以还有一招来解决此问题,不用加session_id(SID);前提是你对服务器的php.ini有配置的权限:
output_buffering改成ON,道理就不表了。
第二个可能的原因是对服务器保存session的文件夹没有读取的权限,还是回到phpinfo.php中,查看session保存的地址:
session.save_path: var/tmp
所以就是检查下var/tmp文件夹是否可写。
写一个文件:test3.php来测试一下:
<?php echo var_dump(is_writeable(ini_get("session.save_path"))); ?>
如果返回bool(false),证明文件夹写权限被限制了,那就换个文件夹咯,在你编写的网页里加入:
//设置当前目录下session子文件夹为session保存路径。 $sessSavePath = dirname(__FILE__).'/session/'; //如果新路径可读可写(可通过FTP上变更文件夹属性为777实现),则让该路径生效。 if(is_writeable($sessSavePath) && is_readable($sessSavePath)) { session_save_path($sessSavePath); }
更多php中实现精确设置session过期时间的方法相关文章请关注PHP中文网!