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