Heim php教程 php手册 Discuz!X中SESSION机制实例详解

Discuz!X中SESSION机制实例详解

Jun 06, 2016 pm 07:43 PM
discuz

这篇文章主要介绍了Discuz!X中SESSION机制,以实例形式较为详细的分析了Discuz!X中SESSION机制的原理与数据库操作技巧,具有一定参考借鉴价值,需要的朋友可以参考

本文实例讲述了Discuz!X中SESSION机制。分享给大家供大家参考。具体如下:

在Discuz! X中一如继往的,SESSION 并没有使用 PHP 自带的 SESSION 机制,而是系统的一套自带的机制。

在数据库中可以看到有两个 SESSION 表:
一个是pre_common_adminsession,是管理员登录后台的 SESSION 表;
另一个是 pre_common_session 表,是所有用户在前台浏览页面时的 SESSION 表。
这两个表都是内存表(内存表的读写速度远高于 MYISAM 表及文本文件)。

在 Discuz! X 中 SESSION 与 COOKIE 是分不开的,因为 SESSION 就是从客户端读取的 COOKIE ,
然后由浏览页面时触发相关的函数执行,再写入数据库 SESSION 表。

我以登录流程为例来讲解程序具体是如何执行的。
在前台首页,点击登录后,弹出一个登录窗口,填写好数据后,提交。form表单提交的 URL 是:

复制代码 代码如下:

?mod=logging&action=login&loginsubmit=yes&floatlogin=yes&inajax=1


数据提交到了 member.php 文件中,在程序中可看到下面的代码:

$mod = !in_array($discuz->var['mod'], $modarray) ? 'logging' : $discuz->var['mod']; //mod的值即是接下来加载的php页面 define('CURMODULE', $mod); $modcachelist = array('register' => array('modreasons', 'stamptypeid', 'fields_required', 'fields_optional', 'ipctrl')); $cachelist = array(); if(isset($modcachelist[CURMODULE])) { $cachelist = $modcachelist[CURMODULE]; } $discuz->cachelist = $cachelist; $discuz->init(); runhooks(); require DISCUZ_ROOT.'./source/module/member/member_'.$mod.'.php'; //完成程序的包含操作

打开source/module/member/member_logging.php文件,是一个类,在类的前面可看到下面三句代码:

$ctl_obj = new logging_ctl(); $method = 'on_'.$_G['gp_action']; // $_G['gp_action'] 等于action的值即 login $ctl_obj->$method(); //$ctl_obj->on_login();

在类中可找到login方法,在方法中,大约 56 行有下面一个判断语句:

if(!submitcheck('loginsubmit', 1, $seccodecheck)) { //判断语句是当游客浏览时,submitcheck 函数的返回值是假,取反,为真。 //当用户登录时,程序走的是else部分,在里面可看到下面五句代码: } else { $_G['uid'] = $_G['member']['uid'] = 0; $_G['username'] = $_G['member']['username'] = $_G['member']['password'] = ''; //变量赋值 $result = userlogin($_G['gp_username'], $_G['gp_password'], $_G['gp_questionid'], $_G['gp_answer'], $_G['setting']['autoidselect'] ? 'auto' : $_G['gp_loginfield']); //从数据库查询用户数据,并返回相应的信息 if($result['status'] > 0) { //状态值大于 0 ,说明有此用户,可以登录 setloginstatus($result['member'], $_G['gp_cookietime'] ? 2592000 : 0); //设置登录状态,即是写 COOKIE 操作,COOKIE 中的数据即是 SESSION 中相应的数据,但此函数并不负责写 SESSION 的操作

我们来看一下 source/function/function_login.php中的 setloginstatus 函数,是普通的写 COOKIE 操作,不再具体讲解:

function setloginstatus($member, $cookietime) { global $_G; $_G['uid'] = $member['uid']; $_G['username'] = $member['username']; $_G['adminid'] = $member['adminid']; $_G['groupid'] = $member['groupid']; $_G['formhash'] = formhash(); $_G['session']['invisible'] = getuserprofile('invisible'); $_G['member'] = $member; $_G['core']->session->isnew = 1; dsetcookie('auth', authcode("{$member['password']}\t{$member['uid']}", 'ENCODE'), $cookietime, 1, true); //authcode加密 dsetcookie('loginuser'); dsetcookie('activationauth'); dsetcookie('pmnum'); }

到这里可以说是登录流程大部分已经走完,但是 COOKIE 不清除时,会一直存在于客户端,如果超时,程序中会在判断弃用此 COOKIE,并重新写入。

下面我们来看一下 DZX 中 SESSION 操作的类,在 source/class/calss_core.php 文件中:
程序中每次请求都会加载 SESSION ,这是由核心类 discuz_core 中的 _init_session 方法来执行的,此方法被置于 类的 init方法中,说明每次加载类,会自动将 SESSION 写入。

function _init_session() { $this->session = new discuz_session(); //创建 SESSION 类 if($this->init_session) { //从 COOKIE 中读取数据 $this->session->init($this->var['cookie']['sid'], $this->var['clientip'], $this->var['uid']); $this->var['sid'] = $this->session->sid; $this->var['session'] = $this->session->var; //判断 SID 是否相等,不等,说明是多个用户在同一主机上登录网站,需要重新写 COOKIE if($this->var['sid'] != $this->var['cookie']['sid']) { dsetcookie('sid', $this->var['sid'], 86400); } if($this->session->isnew) { if(ipbanned($this->var['clientip'])) { $this->session->set('groupid', 6); } } if($this->session->get('groupid') == 6) { $this->var['member']['groupid'] = 6; sysmessage('user_banned'); } //UID 不为空,且需要更新 SESSION 或是 SESSION 超时,更改用户状态,需要用户重新登录 if($this->var['uid'] && ($this->session->isnew || ($this->session->get('lastactivity') + 600) session->set('lastactivity', TIMESTAMP); $update = array('lastip' => $this->var['clientip'], 'lastactivity' => TIMESTAMP); if($this->session->isnew) { $update['lastvisit'] = TIMESTAMP; } DB::update('common_member_status', $update, "uid='".$this->var['uid']."'"); } } }

操作 SESSION 的类是 discuz_session ,我们看这个类里面的两个方法:

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Mar 03, 2024 am 08:57 AM

Die Lösung für das Discuz-Hintergrund-Login-Problem wird aufgezeigt. Mit der rasanten Entwicklung des Internets ist die Website-Erstellung immer häufiger geworden, und Discuz wurde als häufig verwendetes Forum-Website-Erstellungssystem bevorzugt viele Webmaster. Gerade aufgrund seiner leistungsstarken Funktionen stoßen wir jedoch manchmal auf Probleme bei der Verwendung von Discuz, wie z. B. Probleme bei der Anmeldung im Hintergrund. Heute werden wir die Lösung für das Discuz-Hintergrund-Login-Problem enthüllen und konkrete Codebeispiele bereitstellen. Wir hoffen, den Bedürftigen zu helfen.

Was ist Discuz? Definition und Funktionseinführung von Discuz Was ist Discuz? Definition und Funktionseinführung von Discuz Mar 03, 2024 am 10:33 AM

„Discuz erkunden: Definition, Funktionen und Codebeispiele“ Mit der rasanten Entwicklung des Internets sind Community-Foren zu einer wichtigen Plattform für Menschen geworden, um Informationen zu erhalten und Meinungen auszutauschen. Unter den vielen Community-Forumsystemen wird Discuz als bekannte Open-Source-Forumsoftware in China von der Mehrheit der Website-Entwickler und -Administratoren bevorzugt. Was ist Discuz? Welche Funktionen hat es und wie kann es unserer Website helfen? In diesem Artikel wird Discuz ausführlich vorgestellt und spezifische Codebeispiele beigefügt, damit die Leser mehr darüber erfahren können.

Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Mar 12, 2024 pm 10:15 PM

Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Im Discuz-Forum hat die Namensänderungsfunktion seit jeher große Aufmerksamkeit und Nachfrage seitens der Nutzer erhalten. Für einige Benutzer, die ihren Namen ändern müssen, können die Namensänderungs-Requisiten den Benutzernamen leicht ändern, und dies ist auch eine interessante Art der Interaktion. Werfen wir einen detaillierten Blick auf die Umbenennungs-Requisiten in Discuz, einschließlich der Art und Weise, wie man sie erhält, wie man sie verwendet und Lösungen für einige häufig auftretende Probleme. 1. Namensverändernde Requisiten erhalten Sie in Discuz. Namensverändernde Requisiten werden normalerweise über Punkte oder den Administrator erworben

Was soll ich tun, wenn ich auf ein falsches Discuz-Passwort stoße? Schneller Lösungsaustausch! Was soll ich tun, wenn ich auf ein falsches Discuz-Passwort stoße? Schneller Lösungsaustausch! Mar 03, 2024 am 09:33 AM

Was soll ich tun, wenn ich auf ein falsches Discuz-Passwort stoße? Schneller Lösungsaustausch! Diskutieren! Es handelt sich um ein sehr beliebtes Forumprogramm, das Benutzern eine Plattform für eine bequeme Kommunikation bietet. Mit Discuz! Beim Zugriff auf ein Forum kann es vorkommen, dass Sie auf ein falsches Passwort stoßen, was dazu führen kann, dass Benutzer sich nicht anmelden und das Forum nicht normal nutzen können. Nun, das ist Discuz! Wie können wir das Problem schnell lösen, wenn das Passwort falsch ist? Einige Lösungen werden im Folgenden vorgestellt, wobei spezifische Codebeispiele als Referenz bereitgestellt werden. 1. Überprüfen Sie, ob das Passwort

Discuz Editor: ein effizientes Post-Layout-Tool Discuz Editor: ein effizientes Post-Layout-Tool Mar 10, 2024 am 09:42 AM

Discuz Editor: Ein effizientes Post-Layout-Tool Mit der Entwicklung des Internets sind Online-Foren zu einer wichtigen Plattform für die Kommunikation und den Informationsaustausch geworden. Im Forum können Nutzer nicht nur ihre Meinungen und Ideen äußern, sondern auch mit anderen diskutieren und interagieren. Bei der Veröffentlichung eines Beitrags kann ein klares und schönes Format oft mehr Leser anziehen und genauere Informationen vermitteln. Um Benutzern das schnelle Schreiben und Bearbeiten von Beiträgen zu erleichtern, wurde der Discuz-Editor ins Leben gerufen und zu einem effizienten Beitragssatz-Tool entwickelt. Disku

Ausführliche Erläuterung des Discuz-Registrierungsprozesses: So können Sie persönliche Daten einfach ändern Ausführliche Erläuterung des Discuz-Registrierungsprozesses: So können Sie persönliche Daten einfach ändern Mar 13, 2024 pm 12:21 PM

„Detaillierte Erläuterung des Discuz-Registrierungsprozesses: Damit Sie persönliche Informationen einfach ändern können, sind spezifische Codebeispiele erforderlich.“ Discuz ist ein leistungsstarkes Community-Forumsprogramm, das auf verschiedenen Websites häufig verwendet wird. Es bietet zahlreiche Funktionen für die Benutzerregistrierung und die Änderung persönlicher Informationen und Schnittstellen. Dieser Artikel führt Sie ausführlich in den Registrierungsprozess von Discuz ein und stellt spezifische Codebeispiele bereit, die Ihnen dabei helfen, Ihre persönlichen Daten einfach anzupassen und zu ändern. 1. Benutzerregistrierungsprozess Bei Discuz ist die Benutzerregistrierung eine der wichtigen Funktionen der Website

Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Mar 02, 2024 pm 06:03 PM

Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Da Discuz als beliebte Forenplattform häufig bei der Erstellung und Verwaltung von Websites verwendet wird, kommt es manchmal zu Fehlern bei der Backend-Anmeldung, was besorgniserregend ist. Heute besprechen wir die Probleme, die zu Anmeldefehlern im Discuz-Backend führen können, stellen einige Lösungen bereit und fügen spezifische Codebeispiele bei. Ich hoffe, dieser Artikel kann Webmastern und Entwicklern helfen, die auf ähnliche Probleme stoßen. 1. Bei der Fehlerbehebung geht es darum, das Problem des Anmeldefehlers bei Discuz im Hintergrund zu lösen.

Anleitung zur Änderung des Discuz-Domänennamens Anleitung zur Änderung des Discuz-Domänennamens Mar 09, 2024 pm 04:36 PM

Bedienungsanleitung zur Änderung des Discuz-Domänennamens Bei der Verwendung des Discuz-Forumsystems müssen wir manchmal den Domänennamen des Forums ändern. Dies kann daran liegen, dass der Domänenname geändert werden muss oder einige Probleme bei der Auflösung von Domänennamen behoben werden müssen. In diesem Artikel wird detailliert beschrieben, wie der Domänenname im Discuz-Forumsystem geändert wird, und es werden einige spezifische Codebeispiele aufgeführt. 1. Daten sichern Bevor wir einen Vorgang durchführen, müssen wir die Daten sichern, um Datenverlust aufgrund von Betriebsfehlern zu verhindern. In Discuz können Sie die Datensicherung im Hintergrund nutzen

See all articles