<?
php
//
定义操作页面
define
(
'
CURscrīpt
'
,
'
logging
'
);
//
包含公共文件
require_once
'
./include/common.inc.php
'
;
//
包含misc函数文件
require_once
DISCUZ_ROOT
.
'
./include/misc.func.php
'
;
//
判断动作
//注销
if
(
$action
==
'
logout
'
&&
!
empty
(
$formhash
)
&&
$formhash
==
FORMHASH) {
//
清除cookies
clearcookies();
//
重置用户状态为游客
$groupid
=
7
;
$discuz_uid
=
0
;
//
清除用户名密码
$discuz_user
=
$discuz_pw
=
''
;
//
重置页面样式
$styleid
=
$_DCACHE
[
'
settings
'
][
'
styleid
'
];
//
显示注销成功页面
showmessage(
'
logout_succeed
'
,
dreferer());
}
//
登陆
elseif
(
$action
==
'
login
'
) {
//
判断用户是否为游客
if
(
$discuz_uid
) {
//
显示登陆成功页面
showmessage(
'
login_succeed
'
,
$indexname
);
}
//
登陆用户名的字段名
$field
=
isset
(
$loginfield
)
&&
$loginfield
==
'
uid
'
?
'
uid
'
:
'
username
'
;
//
验证码检查
//get secure code checking status (pos. -2)
$seccodecheck
=
substr
(
sprintf
(
'
%05b
'
,
$seccodestatus
)
,
-
2
,
1
);
//
判断是否为提交登陆
if
(
!
submitcheck(
'
loginsubmit
'
,
1
,
$seccodecheck
)) {
//
显示登陆页面
$discuz_action
=
6
;
$referer
=
dreferer();
$thetimenow
=
'
(GMT
'
.
(
$timeoffset
>
0
?
'
+
'
:
''
)
.
$timeoffset
.
'
)
'
.
gmdate
(
"
$dateformat
$timeformat
"
,
$timestamp
+
$timeoffset
*
3600
)
.
$styleselect
=
''
;
$query
=
$db
->
query(
"
SELECT styleid, name FROM {
$tablepre
}styles WHERE available='1'
"
);
while
(
$styleinfo
=
$db
->
fetch_array(
$query
)) {
$styleselect
.=
"
<option value=\
"
$styleinfo
[styleid]\
"
>
$styleinfo
[name]</option>\n
"
;
}
$_DCOOKIE
[
'
cookietime
'
]
=
isset
(
$_DCOOKIE
[
'
cookietime
'
])
?
$_DCOOKIE
[
'
cookietime
'
]
:
2592000
;
$cookietimecheck
=
array
((
isset
(
$_DCOOKIE
[
'
cookietime
'
])
?
intval
(
$_DCOOKIE
[
'
cookietime
'
])
:
2592000
)
=>
'
checked
'
);
if
(
$seccodecheck
) {
$seccode
=
random(
4
,
1
);
}
include
template(
'
login
'
);
}
else
{
//
处理登陆
//用户信息置空
$discuz_uid
=
0
;
$discuz_user
=
$discuz_pw
=
$discuz_secques
=
$md5_password
=
''
;
$member
=
array
();
//
判断是否被限制登陆,返回0,1,2,3。声明在misc.func.php
$loginperm
=
logincheck();
if
(
!
$loginperm
) {
//
显示限制登陆
showmessage(
'
login_strike
'
);
}
//
安全提问处理,返回一串字符或空。声明在global.func.php
$secques
=
quescrypt(
$questionid
,
$answer
);
//
判断是否安全提问页面登陆
if
(
isset
(
$loginauth
)) {
$field
=
'
username
'
;
$password
=
'
VERIFIED
'
;
list
(
$username
,
$md5_password
)
=
explode
(
"
\t
"
,
authcode(
$loginauth
,
'
DECODE
'
));
}
else
{
$md5_password
=
md5
(
$password
);
$password
=
preg_replace
(
"
/^(.{
"
.
round
(
strlen
(
$password
)
/
4
)
.
"
})(.+?)(.{
"
.
round
(
strlen
(
$password
)
/
6
)
.
"
})$/s
"
,
"
\\1***\\3
"
,
$password
);
}
//
查询数据表members,usergroups
$query
=
$db
->
query(
"
SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
FROM {
$tablepre
}members m LEFT JOIN {
$tablepre
}usergroups u USING (groupid)
WHERE m.
$field
='
$username
'
"
);
//
取出用户认证信息包括UID,用户名,密码,安全提问,管理权限,用户组ID,页面风格,上次访问,最后发帖,是否允许隐身
$member
=
$db
->
fetch_array(
$query
);
//
验证登陆
if
(
$member
[
'
discuz_uid
'
]
&&
$member
[
'
discuz_pw
'
]
==
$md5_password
) {
//
验证安全提问
if
(
$member
[
'
discuz_secques
'
]
==
$secques
) {
//
安全提问匹配
//从数组中将变量导入到当前的符号表
extract
(
$member
);
//
处理用户名
$discuz_userss
=
$discuz_user
;
$discuz_user
=
addslashes
(
$discuz_user
);
//
判断隐身模式
if
((
$allowinvisible
&&
$loginmode
==
'
invisible
'
)
||
$loginmode
==
'
normal
'
) {
//
更新members表用户现在的模式:隐身或普通
$db
->
query(
"
UPDATE {
$tablepre
}members SET invisible='
"
.
(
$loginmode
==
'
invisible
'
?
1
:
0
)
.
"
' WHERE uid='
$member
[discuz_uid]'
"
,
'
UNBUFFERED
'
);
}
$styleid
=
intval
(
empty
(
$_POST
[
'
styleid
'
])
?
(
$styleidmem
?
$styleidmem
:
$_DCACHE
[
'
settings
'
][
'
styleid
'
])
:
$_POST
[
'
styleid
'
]);
$cookietime
=
intval
(
isset
(
$_POST
[
'
cookietime
'
])
?
$_POST
[
'
cookietime
'
]
:
(
$_DCOOKIE
[
'
cookietime
'
]
?
$_DCOOKIE
[
'
cookietime
'
]
:
0
));
//
写cookie
dsetcookie(
'
cookietime
'
,
$cookietime
,
31536000
);
dsetcookie(
'
auth
'
,
authcode(
"
$discuz_pw
\t
$discuz_secques
\t
$discuz_uid
"
,
'
ENCODE
'
)
,
$cookietime
);
$sessionexists
=
0
;
//
判断是否为等待验证会员
if
(
$groupid
==
8
) {
showmessage(
'
login_succeed_inactive_member
'
,
'
memcp.php
'
);
}
else
{
showmessage(
'
login_succeed
'
,
dreferer());
}
}
elseif
(
empty
(
$secques
)) {
//
安全提问不匹配且安全提问不为空
$username
=
dhtmlspecialchars(
$member
[
'
discuz_user
'
]);
$loginmode
=
dhtmlspecialchars(
$loginmode
);
$styleid
=
intval
(
$styleid
);
$cookietime
=
intval
(
$cookietime
);
//
加密已接受的用户名和密码
$loginauth
=
authcode(
addslashes
(
$member
[
'
discuz_user
'
])
.
"
\t
"
.
addslashes
(
$member
[
'
discuz_pw
'
])
,
'
ENCODE
'
);
//
显示回答安全提问
include
template(
'
login_secques
'
);
dexit();
}
}
//
生成密码错误日志记录
$errorlog
=
"
<?PHP exit('Access Denied'); ?>\t
"
.
$timestamp
.
"
\t
"
.
dhtmlspecialchars(
$member
[
'
discuz_user
'
]
?
$member
[
'
discuz_user
'
]
:
stripslashes
(
$username
))
.
"
\t
"
.
$password
.
"
\t
"
.
(
$secques
?
"
Ques #
"
.
dhtmlspecialchars(
$questionid
)
:
''
)
.
"
\t
"
.
$onlineip
.
"
\n
"
;
loginfailed(
$loginperm
);
//
日志记录加入日志文件
@
$fp
=
fopen
(DISCUZ_ROOT
.
'
./forumdata/illegallog.php
'
,
'
a
'
);
@
flock
(
$fp
,
2
);
@
fwrite
(
$fp
,
$errorlog
);
@
fclose
(
$fp
);
//
显示登陆出错页面
showmessage(
'
login_invalid
'
,
NULL
,
'
HALTED
'
);
}
}
else
{
showmessage(
'
undefined_action
'
);
}
?>