- 判断用户是否已登录。
- 如果已登录,获取该用户的详细信息。
下面我将为你详细解释实现方法,并提供最常用和最推荐的代码示例。

(图片来源网络,侵删)
核心函数
织梦CMS提供了两个核心的全局函数来处理用户登录相关的信息:
IsLogin(): 用于判断当前用户是否已经登录,如果已登录,返回用户ID(mid);如果未登录,返回0。GetCurMemberInfo(): 用于获取当前登录用户的详细信息,如果用户未登录,则返回false或空数组。
这两个函数通常配合使用,逻辑是:先用 IsLogin() 判断,如果返回了用户ID(非0),再用 GetCurMemberInfo() 获取详细信息。
在PHP文件中直接获取(最常用)
这是在模板文件(.htm)之外,比如自定义的PHP页面、控制器或模型文件中获取登录信息的方法。
代码示例:

(图片来源网络,侵删)
<?php
// 引入织梦的核心文件,确保在非模板文件中能调用系统函数
// 如果你的代码已经在织梦的框架内(如module.php),可以省略这一步
require_once(dirname(__FILE__) . '/include/common.inc.php');
// 1. 判断用户是否登录
$uid = IsLogin();
if ($uid > 0) {
// 2. 用户已登录,获取用户详细信息
$memberInfo = GetCurMemberInfo();
// 3. 打印或使用用户信息
echo "欢迎您," . $memberInfo['uname'] . "!<br>";
echo "您的用户ID是:" . $memberInfo['mid'] . "<br>";
echo "您的邮箱是:" . $memberInfo['email'] . "<br>";
echo "您的注册时间是:" . date('Y-m-d H:i:s', $memberInfo['jointime']) . "<br>";
// 你可以在这里根据用户ID做更多操作,比如查询该用户发布的文章等
// $dsql = new DedeSql(false);
// $dsql->SetQuery("SELECT * FROM dede_archives WHERE mid = $uid");
// $dsql->Execute('me');
// while ($row = $dsql->GetArray('me')) {
// echo "您发布的文章标题:" . $row['title'] . "<br>";
// }
} else {
// 4. 用户未登录
echo "您尚未登录,请先<a href='/member/login.php'>登录</a>。";
}
?>
代码解释:
require_once(...): 这行代码确保你的PHP文件能够访问织梦的全局函数和类,如果你的代码是作为织梦插件或模块的一部分,通常不需要这行。$uid = IsLogin(): 调用函数获取登录用户的ID。if ($uid > 0): 判断$uid是否大于0,大于0表示用户已登录。$memberInfo = GetCurMemberInfo(): 如果用户已登录,调用此函数获取一个包含用户所有信息的数组。$memberInfo['uname'],$memberInfo['mid']等:$memberInfo是一个关联数组,键名是数据库中dede_member表的字段名,uname(用户名),email(邮箱),sex(性别),scores(积分),jointime(注册时间戳) 等。
在模板文件(.htm)中获取
如果你想在织梦的模板文件(index.htm, head.htm)中显示登录状态,有几种方式。
方式A:使用织梦的内置标签(推荐)
织梦提供了一些内置标签来简化模板中的逻辑。
示例代码 (head.htm 或其他模板文件中):

(图片来源网络,侵删)
{dede:if get='IsLogin()>0'}
<!-- 如果用户已登录,显示这部分内容 -->
<div class="user-info">
欢迎,<strong>{dede:field.userid /}</strong>!
<a href="/member/">会员中心</a>
<a href="/member/index.php?action=exit">退出登录</a>
</div>
{else}
<!-- 如果用户未登录,显示这部分内容 -->
<div class="login-area">
<a href="/member/login.php">登录</a>
<a href="/member/reg.php">注册</a>
</div>
{/dede:if}
标签解释:
{dede:if get='IsLogin()>0'}: 这是一个条件判断标签。get='IsLogin()>0'会执行PHP代码IsLogin()>0并根据结果(真/假)来决定显示哪个部分。{dede:field.userid /}: 这个标签在用户登录后会自动获取当前登录用户的用户名(uname)。
方式B:使用PHP代码块(灵活但稍复杂)
如果你想在模板中获取更详细的用户信息,可以使用PHP代码块。
示例代码 (head.htm 中):
{dede:php}
$memberInfo = GetCurMemberInfo();
if ($memberInfo) {
// 用户已登录
echo "<div>欢迎, " . $memberInfo['uname'] . "!</div>";
} else {
// 用户未登录
echo "<div><a href='/member/login.php'>请登录</a></div>";
}
{/dede:php}
注意: 在模板中过多使用 {dede:php} 会降低模板的可维护性,并且可能影响性能,对于简单的判断,推荐使用方式A。
总结与最佳实践
| 场景 | 推荐方法 | 核心代码 |
|---|---|---|
| 在PHP文件中(如自定义页面、插件) | 方法一 | $uid = IsLogin(); if($uid > 0) { $info = GetCurMemberInfo(); } |
| 在模板文件中(如头部、底部) | 方法A(内置标签) | {dede:if get='IsLogin()>0'}...{else}...{/dede:if} |
| 在模板中需要复杂逻辑 | 方法B(PHP代码块) | {dede:php} $info = GetCurMemberInfo(); ... {/dede:php} |
重要提示:
- 确保文件编码:你的PHP文件和模板文件都建议保存为
UTF-8无BOM格式,以避免乱码问题。 - 安全考虑:获取用户信息后,如果涉及数据库查询,请务必对用户ID(
$uid)进行过滤,防止SQL注入,虽然织梦的$dsql类有内置的防注入机制,但养成良好的编码习惯总是好的。 - 退出登录:织梦的退出登录页面通常是
/member/index.php?action=exit,你可以直接链接到这个地址。
希望这个详细的解释能帮助你完美地在织梦CMS中获取用户登录状态和信息!
