/source/class/class_member.php$_GET['cookietime'] ? 2592000 : 0:- 如果
$_GET['cookietime']存在且为真,则有效期为 2592000 秒(30 天)。 - 如果
$_GET['cookietime']不存在或为假,则有效期为 0(即 Session Cookie,浏览器关闭后失效)。
- 如果
- 保存修改:在
function_member.php文件中保存上述修改。 - 清理缓存:清除浏览器中的 Cookie 和缓存。
- 重新登录:重新登录 Discuz! 论坛,并关闭浏览器,检查是否保持登录状态。
- 验证有效期:验证登录状态是否在 30 天内保持有效。
- 在进行任何代码修改之前,务必备份你的文件,以便在出现问题时能够恢复。
- 这次修改针对登录状态的 Cookie 设置,不会影响其他 Cookies 的行为。
- 修改后,用户每次登录都会保持 30 天的有效期,而不再受“记住我”选项的影响。
-
- #2 Dream
- 2024-10-30 02:15:59
貌似最新版的x3.5只有这段代码复制代码- function setloginstatus($member, $cookietime) {
- global $_G;
- $_G['uid'] = intval($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;
- loadcache('usergroup_'.$_G['groupid']);
- C::app()->session->isnew = true;
- C::app()->session->updatesession();
- dsetcookie('auth', authcode("{$member['password']}\t{$member['uid']}", 'ENCODE'), $cookietime, 1, true);
- dsetcookie('loginuser');
- dsetcookie('activationauth');
- dsetcookie('pmnum');
- include_once libfile('function/stat');
- updatestat('login', 1);
- if(defined('IN_MOBILE')) {
- updatestat('mobilelogin', 1);
- }
- if($_G['setting']['connect']['allow'] && $_G['member']['conisbind']) {
- updatestat('connectlogin', 1);
- }
- $rule = updatecreditbyaction('daylogin', $_G['uid']);
- if(!$rule['updatecredit']) {
- checkusergroup($_G['uid']);
- }
- }
-
- #3 nyarime
- 2025-4-15 20:58:29
Dream 发表于 2024-10-30 02:15
貌似最新版的x3.5只有这段代码
弄错路径了,是/source/class/class_member.php
修改 Discuz! X3.5 的登录 Cookie 有效期
简介
在 Discuz! X3.5 中,用户的登录状态默认使用 Session Cookie。这意味着,当用户关闭浏览器后,登录状态会失效。如果我们希望延长登录状态的有效期,例如保持 30 天,可以通过修改源码中的相关部分来实现。
本教程将详细讲解如何修改 Discuz! X3.5 的登录 Cookie 有效期。
步骤 1:找到 setloginstatus() 函数
首先,我们需要找到负责设置用户登录状态的函数 setloginstatus()。
文件路径:
在这个文件中,setloginstatus() 函数用于设置用户的登录状态,包括相关的登录 Cookie(如 dz_auth)。
找到以下代码行:
setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);
这段代码使用了一个三元运算符,根据用户是否选择了“记住我”选项来决定登录状态的有效期:
步骤 2:修改有效期
为了让登录状态的有效期固定为 30 天,无论用户是否选择“记住我”,我们可以修改上面的代码,将三元运算符替换为固定值:
修改前:
setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);
修改后:
setloginstatus($result['member'], 2592000); // 固定设置为 30 天
通过这一修改,用户登录后的 Cookie 有效期将始终为 30 天。
步骤 3:保存并测试
注意事项
结论
通过简单的代码修改,我们可以轻松将 Discuz! X3.5 中的登录 Cookie 有效期从默认的 Session 改为固定的 30 天。这不仅提升了用户体验,还避免了用户频繁重新登录的麻烦。