搜索
缓存时间10 现在时间10 缓存数据 时间很快,生活很慢,日子平凡里,不动声色,就很美好。
查看: 192|回复: 1

修改 Discuz! X3.5 的登录 Cookie 有效期

[复制链接]
发表于 2024-10-16 15:39:04 | 显示全部楼层 |阅读模式

厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。使用帐户,不仅可以享受无广告的清爽界面!

您需要 登录 才可以下载或查看,没有账号?注册

×

简介

在 Discuz! X3.5 中,用户的登录状态默认使用 Session Cookie。这意味着,当用户关闭浏览器后,登录状态会失效。如果我们希望延长登录状态的有效期,例如保持 30 天,可以通过修改源码中的相关部分来实现。

本教程将详细讲解如何修改 Discuz! X3.5 的登录 Cookie 有效期。

步骤 1:找到 setloginstatus() 函数

首先,我们需要找到负责设置用户登录状态的函数 setloginstatus()

文件路径:

  • source/class/member/function_member.php

在这个文件中,setloginstatus() 函数用于设置用户的登录状态,包括相关的登录 Cookie(如 dz_auth)。

找到以下代码行:

setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);

这段代码使用了一个三元运算符,根据用户是否选择了“记住我”选项来决定登录状态的有效期:

  • $_GET['cookietime'] ? 2592000 : 0
    • 如果 $_GET['cookietime'] 存在且为真,则有效期为 2592000 秒(30 天)。
    • 如果 $_GET['cookietime'] 不存在或为假,则有效期为 0(即 Session Cookie,浏览器关闭后失效)。

步骤 2:修改有效期

为了让登录状态的有效期固定为 30 天,无论用户是否选择“记住我”,我们可以修改上面的代码,将三元运算符替换为固定值:

修改前:

setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);

修改后:

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 天。这不仅提升了用户体验,还避免了用户频繁重新登录的麻烦。

[发帖际遇]: nyarime 在网吧通宵,花了 9 点数. 幸运榜 / 衰神榜
爱生活,爱奶昔~
发表于 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']);
        }
}
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

Powered by Nyarime. Licensed

GMT+8, 2024-12-9 10:11 , Processed in 0.024333 second(s), 12 queries , Gzip On, Redis On
发帖际遇 ·手机版 ·小黑屋 ·RSS ·奶昔网

登录切换风格
快速回复 返回顶部 返回列表