久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
Discuz! 官方交流社區
標題:
Discuz x3.5 核心文件 function/function_member.php 函數注釋
[打印本頁]
作者:
新秀網絡驗證
時間:
2024-10-28 21:34
標題:
Discuz x3.5 核心文件 function/function_member.php 函數注釋
<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: function_member.php 35030 2014-10-23 07:43:23Z laoguozhang $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
/**
* 用戶登錄函數
*
* @param string $username 用戶名、UID、郵箱或安全手機號
* @param string $password 用戶密碼
* @param int $questionid 安全問題ID(暫未使用)
* @param string $answer 安全問題答案(暫未使用)
* @param string $loginfield 登錄方式標識,默認為'username',可選'uid'、'email'、'auto'、'secmobile'
* @param string $ip 用戶登錄的IP地址,默認為空
* [url=home.php?mod=space&uid=33239]@return[/url] array 返回登錄結果,包括狀態(status)、用戶信息(member)和UC登錄結果(ucresult)
*/
function userlogin($username, $password, $questionid, $answer, $loginfield = 'username', $ip = '') {
$return = array();
// 根據登錄字段確定登錄類型
if($loginfield == 'uid' && getglobal('setting/uidlogin')) {
$isuid = 1;
} elseif($loginfield == 'email') {
$isuid = 2;
} elseif($loginfield == 'auto') {
$isuid = 3;
} elseif($loginfield == 'secmobile' && getglobal('setting/secmobilelogin')) {
$isuid = 4;
} else {
$isuid = 0;
}
// 加載UCenter通信函數,如未定義則先加載
if(!function_exists('uc_user_login')) {
loaducenter();
}
// 處理自動登錄邏輯
if($isuid == 3) {
// 根據用戶名嘗試登錄,支持UID、郵箱和安全手機號
if(!strcmp(dintval($username), $username) && getglobal('setting/uidlogin')) {
$return['ucresult'] = uc_user_login($username, $password, 1, 1, $questionid, $answer, $ip, 1);
} elseif(isemail($username)) {
$return['ucresult'] = uc_user_login($username, $password, 2, 1, $questionid, $answer, $ip, 1);
} elseif(preg_match('/^(\d{1,12}|\d{1,3}-\d{1,12})$/', $username) && getglobal('setting/secmobilelogin')) {
$username = strpos($username, '-') === false ? (getglobal('setting/smsdefaultcc') . '-' . $username) : $username;
$return['ucresult'] = uc_user_login($username, $password, 4, 1, $questionid, $answer, $ip, 1);
}
// 如果登錄失敗且不是因為賬戶不存在,則嘗試使用用戶名密碼登錄
if($return['ucresult'][0] <= 0 && $return['ucresult'][0] != -3) {
$return['ucresult'] = uc_user_login(addslashes($username), $password, 0, 1, $questionid, $answer, $ip);
}
} else {
// 處理非自動登錄類型
if($isuid == 4) {
$username = strpos($username, '-') === false ? (getglobal('setting/smsdefaultcc') . '-' . $username) : $username;
}
$return['ucresult'] = uc_user_login(addslashes($username), $password, $isuid, 1, $questionid, $answer, $ip);
}
// 解析UC登錄結果
$tmp = array();
$duplicate = '';
list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email'], $duplicate) = $return['ucresult'];
$return['ucresult'] = $tmp;
// 檢查登錄結果,登錄失敗或用戶數據重復則返回
if($duplicate && $return['ucresult']['uid'] > 0 || $return['ucresult']['uid'] <= 0) {
$return['status'] = 0;
return $return;
}
// 獲取用戶詳細信息
$member = getuserbyuid($return['ucresult']['uid'], 1);
if(!$member || empty($member['uid'])) {
$return['status'] = -1;
return $return;
}
$return['member'] = $member;
// 登錄成功
$return['status'] = 1;
if($member['_inarchive']) {
// 如果用戶是歸檔用戶,則將其移回主表
C::t('common_member_archive')->move_to_master($member['uid']);
}
// 更新用戶郵箱,解決可能的郵箱變更問題
if($member['email'] != $return['ucresult']['email']) {
C::t('common_member')->update($return['ucresult']['uid'], array('email' => $return['ucresult']['email']));
}
return $return;
}
/**
* 設置登錄狀態
*
* 用于在用戶成功登錄后,設置用戶的登錄狀態,包括但不限于用戶ID、用戶名、管理員等級、用戶組等信息,
* 同時更新會話信息、設置登錄相關的cookie,以及更新統計信息。
*
* @param array $member 包含用戶登錄信息的數組,至少應包含uid、username、adminid、groupid等字段
* @param int $cookietime 登錄cookie的有效時間,單位為秒
*/
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();
// 設置登錄認證cookie
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']);
}
}
/**
* 登錄檢查
*
* 用于檢查用戶登錄名是否可用,如果是,則返回可以登錄的標志;如果不可用,根據失敗次數返回相應的延遲時間。
*
* @param string $username 用戶輸入的用戶名
* @return int 返回值為0表示可以登錄,大于0表示需要等待的時間(秒)
*/
function logincheck($username) {
global $_G;
$return = 0;
$username = trim($username);
loaducenter();
if(function_exists('uc_user_logincheck')) {
// 如果存在與UCenter的登錄檢查函數,則調用UCenter的登錄檢查
$return = uc_user_logincheck(addslashes($username), $_G['clientip']);
} else {
// 不存在時,進行本地登錄檢查
$login = C::t('common_failedlogin')->fetch_ip($_G['clientip']);
$return = (!$login || (TIMESTAMP - $login['lastupdate'] > 900)) ? 5 : max(0, 5 - $login['count']);
if(!$login) {
C::t('common_failedlogin')->insert(array(
'ip' => $_G['clientip'],
'count' => 0,
'lastupdate' => TIMESTAMP
), false, true);
} elseif(TIMESTAMP - $login['lastupdate'] > 900) {
C::t('common_failedlogin')->insert(array(
'ip' => $_G['clientip'],
'count' => 0,
'lastupdate' => TIMESTAMP
), false, true);
C::t('common_failedlogin')->delete_old(901);
}
}
return $return;
}
/**
* 登錄失敗處理
*
* 當用戶登錄失敗時,記錄登錄失敗信息,防止惡意登錄攻擊。
*
* @param string $username 用戶輸入的用戶名
*/
function loginfailed($username) {
global $_G;
loaducenter();
if(function_exists('uc_user_logincheck')) {
// 如果存在與UCenter的登錄檢查函數,則不進行處理
return;
}
// 記錄登錄失敗信息
C::t('common_failedlogin')->update_failed($_G['clientip']);
}
/**
* 檢查IP嘗試次數是否超過限制。
*
* @param $numiptry int 嘗試次數限制。
* @param $timeiptry int 時間限制(秒)。超過此時間限制,嘗試次數將被重置。
* @return bool 如果嘗試次數超過限制,返回true;否則,返回false。
*/
function failedipcheck($numiptry, $timeiptry) {
global $_G;
if(!$numiptry) {
return false;
}
// 檢查當前IP在指定時間內嘗試的次數是否已達到或超過限制
return $numiptry <= C::t('common_failedip')->get_ip_count($_G['clientip'], TIMESTAMP - $timeiptry);
}
/**
* 記錄一個失敗的IP嘗試。
*/
function failedip() {
global $_G;
// 插入當前IP到失敗嘗試表中
C::t('common_failedip')->insert_ip($_G['clientip']);
}
/**
* 獲取邀請碼信息。
*
* @return array 包含邀請碼相關用戶信息的數組,如果不存在有效邀請碼則返回空數組。
*/
function getinvite() {
global $_G;
// 如果注冊功能關閉,則直接返回空數組
if($_G['setting']['regstatus'] == 1) return array();
$result = array();
$cookies = empty($_G['cookie']['invite_auth']) ? array() : explode(',', $_G['cookie']['invite_auth']);
$cookiecount = count($cookies);
// 處理通過URL傳入的邀請碼
$_GET['invitecode'] = trim($_GET['invitecode']);
if($cookiecount == 2 || $_GET['invitecode']) {
$id = intval($cookies[0]);
$code = trim($cookies[1]);
if($_GET['invitecode']) {
// 通過邀請碼查詢邀請信息
$invite = C::t('common_invite')->fetch_by_code($_GET['invitecode']);
$code = trim($_GET['invitecode']);
} else {
// 通過ID查詢邀請信息
$invite = C::t('common_invite')->fetch($id);
}
// 驗證邀請信息的有效性
if(!empty($invite)) {
if($invite['code'] == $code && empty($invite['fuid']) && (empty($invite['endtime']) || $_G['timestamp'] < $invite['endtime'])) {
$result['uid'] = $invite['uid'];
$result['id'] = $invite['id'];
}
}
} elseif($cookiecount == 3) { // 處理通過cookie傳入的邀請碼
$uid = intval($cookies[0]);
$code = trim($cookies[1]);
$invite_code = helper_invite::generate_key($uid);
if($code === $invite_code) {
$member = getuserbyuid($uid);
if($member) {
$usergroup = C::t('common_usergroup')->fetch($member['groupid']);
// 如果用戶組不允許邀請或邀請需要付費,則返回空數組
if(!$usergroup['allowinvite'] || $usergroup['inviteprice'] > 0) return array();
} else {
return array();
}
$result['uid'] = $uid;
}
}
// 如果獲取到有效的邀請信息,填充邀請者用戶名
if($result['uid']) {
$member = getuserbyuid($result['uid']);
$result['username'] = $member['username'];
} else {
// 如果沒有有效的邀請信息,清除邀請cookie
dsetcookie('invite_auth', '');
}
return $result;
}
/**
* 替換字符串中的站點變量
*
* @param string $string 需要替換的字符串
* @param array $replaces 用戶自定義的替換數組,默認為空數組
* @return string 替換后的字符串
*/
function replacesitevar($string, $replaces = array()) {
global $_G;
// 定義站點變量
$sitevars = array(
'{sitename}' => $_G['setting']['sitename'],
'{bbname}' => $_G['setting']['bbname'],
'{time}' => dgmdate(TIMESTAMP, 'Y-n-j H:i'),
'{adminemail}' => $_G['setting']['adminemail'],
'{username}' => $_G['member']['username'],
'{myname}' => $_G['member']['username']
);
// 合并用戶自定義替換數組和站點變量
$replaces = array_merge($sitevars, $replaces);
// 替換字符串并返回
return str_replace(array_keys($replaces), array_values($replaces), $string);
}
/**
* 清除用戶cookie
*/
function clearcookies() {
global $_G;
// 遍歷cookie,除去特定的鍵值,其余全部清除
foreach($_G['cookie'] as $k => $v) {
if($k != 'widthauto') {
dsetcookie($k);
}
}
// 重置用戶登錄狀態
$_G['uid'] = $_G['adminid'] = 0;
$_G['username'] = $_G['member']['password'] = '';
}
/**
* 處理犯罪記錄相關操作
*
* @param string $fun 要執行的操作
* @return mixed 操作結果,失敗返回false
*/
function crime($fun) {
if(!$fun) {
return false;
}
include_once libfile('class/member');
$crimerecord = & crime_action_ctl::instance();
$arg_list = func_get_args();
// 根據傳入的函數名執行不同的操作
if($fun == 'recordaction') {
list(, $uid, $action, $reason) = $arg_list;
return $crimerecord->$fun($uid, $action, $reason);
} elseif($fun == 'getactionlist') {
list(, $uid) = $arg_list;
return $crimerecord->$fun($uid);
} elseif($fun == 'getcount') {
list(, $uid, $action) = $arg_list;
return $crimerecord->$fun($uid, $action);
} elseif($fun == 'search') {
list(, $action, $username, $operator, $starttime, $endtime, $reason, $start, $limit) = $arg_list;
return $crimerecord->$fun($action, $username, $operator, $starttime, $endtime, $reason, $start, $limit);
} elseif($fun == 'actions') {
return crime_action_ctl::$actions;
}
return false;
}
/**
* 檢查并更新關注的動態
*/
function checkfollowfeed() {
global $_G;
if($_G['uid']) {
$lastcheckfeed = 0;
if(!empty($_G['cookie']['lastcheckfeed'])) {
$time = explode('|', $_G['cookie']['lastcheckfeed']);
if($time[0] == $_G['uid']) {
$lastcheckfeed = $time[1];
}
}
if(!$lastcheckfeed) {
$lastcheckfeed = getuserprofile('lastactivity');
}
// 設置最后一次檢查動態的時間
dsetcookie('lastcheckfeed', $_G['uid'].'|'.TIMESTAMP, 31536000);
// 獲取關注的用戶
$followuser = C::t('home_follow')->fetch_all_following_by_uid($_G['uid']);
$uids = array_keys($followuser);
if(!empty($uids)) {
// 檢查是否有新的動態
$count = C::t('home_follow_feed')->count_by_uid_dateline($uids, $lastcheckfeed);
if($count) {
// 有新動態,添加通知
notification_add($_G['uid'], 'follow', 'member_follow', array('count' => $count, 'from_id'=>$_G['uid'], 'from_idtype' => 'follow'), 1);
}
}
}
// 更新檢查動態的cookie
dsetcookie('checkfollow', 1, 30);
}
/**
* 驗證郵箱格式及合法性
*
* @param string $email 需要驗證的郵箱地址
*/
function checkemail($email) {
global $_G;
$email = strtolower(trim($email));
if(strlen($email) > 255) {
// 郵箱地址過長
showmessage('profile_email_illegal', '', array(), array('handle' => false));
}
if($_G['setting']['regmaildomain']) {
// 檢查郵箱域名是否合法
$maildomainexp = '/('.str_replace("\r\n", '|', preg_quote(trim($_G['setting']['maildomainlist']), '/')).')$/i';
if($_G['setting']['regmaildomain'] == 1 && !preg_match($maildomainexp, $email)) {
showmessage('profile_email_domain_illegal', '', array(), array('handle' => false));
} elseif($_G['setting']['regmaildomain'] == 2 && preg_match($maildomainexp, $email)) {
showmessage('profile_email_domain_illegal', '', array(), array('handle' => false));
}
}
// 調用ucenter接口驗證郵箱
loaducenter();
$ucresult = uc_user_checkemail($email);
// 處理ucenter返回的結果
if($ucresult == -4) {
showmessage('profile_email_illegal', '', array(), array('handle' => false));
} elseif($ucresult == -5) {
showmessage('profile_email_domain_illegal', '', array(), array('handle' => false));
} elseif($ucresult == -6) {
showmessage('profile_email_duplicate', '', array(), array('handle' => false));
}
}
/**
* 生成獲取密碼的簽名鏈接
*
* @param int $uid 用戶ID
* @param string $idstring 用戶注冊ID字符串
* @return string 簽名鏈接
*/
function make_getpws_sign($uid, $idstring) {
global $_G;
$link = "member.php?mod=getpasswd&uid={$uid}&id={$idstring}";
return dsign($link);
}
?>
復制代碼
作者:
天外飄仙
時間:
2024-10-28 21:56
感謝大佬分享
作者:
白天也懂夜的黑
時間:
2024-10-29 08:23
小白路過。請問這是干嘛用的?
歡迎光臨 Discuz! 官方交流社區 (http://www.9999xn.com/)
Powered by Discuz! X5.0
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
精品久久人人做人人爽
|
丁香桃色午夜亚洲一区二区三区
|
久久久国产一区二区三区四区小说
|
久久青草欧美一区二区三区
|
影音先锋久久精品
|
欧美在线免费视屏
|
国产日韩欧美精品在线
|
国产乱码精品一区二区三区av
|
亚洲麻豆一区
|
精品卡一卡二卡三卡四在线
|
欧美成人tv
|
91在线观看下载
|
狠狠噜噜久久
|
在线观看日韩国产
|
亚洲国产精品久久人人爱蜜臀
|
国产在线播精品第三
|
一区二区三区我不卡
|
欧美一卡二卡在线观看
|
一片黄亚洲嫩模
|
国产精品99久久久久久久女警
|
国产精品亚洲一区
|
精品精品国产高清a毛片牛牛
|
在线观看国产91
|
奇米一区二区三区av
|
91免费看`日韩一区二区
|
日韩女优电影在线观看
|
午夜精品视频一区
|
欧美jizzhd精品欧美喷水
|
国产三级三级三级精品8ⅰ区
|
日韩欧美精品在线视频
|
黑人精品欧美一区二区蜜桃
|
99综合在线
|
99久久精品费精品国产一区二区
|
久久精品国产77777蜜臀
|
欧美系列一区二区
|
极品少妇xxxx偷拍精品少妇
|
欧美一区二区三区日韩视频
|
欧美专区在线观看一区
|
国产亚洲在线观看
|
亚洲国产合集
|
欧美chengren
|
91丨porny丨在线
|
成人激情免费视频
|
国产精品久久网站
|
极品裸体白嫩激情啪啪国产精品
|
成人一区二区三区视频
|
久色婷婷小香蕉久久
|
日韩不卡一区二区
|
91麻豆精品国产自产在线观看一区
|
国产在线观看免费一区
|
精品制服美女久久
|
久久激情五月婷婷
|
激情综合色播五月
|
久久av老司机精品网站导航
|
午夜精品福利一区二区蜜股av
|
亚洲久本草在线中文字幕
|
久久高清国产
|
青青草成人在线观看
|
亚洲www啪成人一区二区麻豆
|
欧亚一区二区三区
|
另类国产ts人妖高潮视频
|
亚洲欧美卡通另类91av
|
国产精品久久久久aaaa樱花
|
国产精品久久久99
|
夜色激情一区二区
|
免费观看91视频大全
|
韩国成人精品a∨在线观看
|
激情深爱一区二区
|
成人美女在线观看
|
精品69视频一区二区三区Q
|
日韩一级不卡
|
欧美综合国产
|
69堂成人精品免费视频
|
精品国精品自拍自在线
|
国产精品每日更新在线播放网址
|
久久精品一区
|
欧美日韩在线直播
|
欧美日韩在线精品
|
毛片av中文字幕一区二区
|
国产日韩v精品一区二区
|
国产精品久久久久久久久晋中
|
一区二区三区久久久
|
精品午夜久久福利影院
|
91香蕉视频mp4
|
免费视频一区二区三区在线观看
|
制服丝袜在线91
|
国产精品久久久久久亚洲伦
|
午夜精品一区二区三区三上悠亚
|
国产成人激情av
|
亚洲一区在线播放
|
欧美一卡二卡三卡四卡
|
中文欧美字幕免费
|
天堂va蜜桃一区二区三区漫画版
|
欧美激情中文不卡
|
在线视频一区二区免费
|
日韩女优电影在线观看
|
综合婷婷亚洲小说
|
久久精品欧美一区二区三区不卡
|
亚洲乱码国产乱码精品精可以看
|
久久99九九99精品
|
91亚洲大成网污www
|
久久青青草综合
|
黄色成人在线网址
|
久久aⅴ乱码一区二区三区
|
欧美videos大乳护士334
|
午夜电影久久久
|
欧美精品国产一区
|
国产精品中文字幕一区二区三区
|
国产精品豆花视频
|
欧美日韩综合一区
|
综合电影一区二区三区
|
亚洲欧美国产不卡
|
精品国产污污免费网站入口
|
亚洲一区免费看
|
精品国产伦一区二区三区观看方式
|
免费看的黄色欧美网站
|
精品国产欧美一区二区
|
蜜臀精品久久久久久蜜臀
|
亚洲欧洲精品一区二区
|
91在线观看一区二区
|
久久久久九九九
|
亚洲三级在线看
|
成人激情免费电影网址
|
欧美日韩国产a
|
欧美日韩国产色站一区二区三区
|
亚洲欧美日韩国产另类专区
|
中文字幕一区二区三区四区不卡
|
久久久99久久
|
久久激情五月婷婷
|
老鸭窝毛片一区二区三区
|
亚洲图片激情小说
|
欧美日韩18
|
久久久综合九色合综国产精品
|
国产成人免费视频网站高清观看视频
|
色婷婷亚洲精品
|
欧美伊人久久大香线蕉综合69
|
亚洲卡通欧美制服中文
|
欧美日韩日本国产亚洲在线
|
久久女同互慰一区二区三区
|
成人小视频免费在线观看
|
制服丝袜一区二区三区
|
久久不见久久见免费视频7
|
中文字幕中文字幕在线一区
|
欧美一区1区三区3区公司
|
日韩一区二区在线看
|
91麻豆精品国产91久久久资源速度
|
欧美日韩亚洲综合在线
|
天天操天天干天天综合网
|
国产日韩一区二区三区
|
亚洲色图视频免费播放
|
亚洲高清123
|
亚洲国产视频一区二区
|
亚洲尤物在线
|
日韩电影在线观看网站
|
色综合久久久久综合
|
免费高清不卡av
|
欧美日产国产精品
|
成人免费观看男女羞羞视频
|
久久久另类综合
|
欧美日韩另类丝袜其他
|
又紧又大又爽精品一区二区
|
老司机免费视频久久
|
久久综合综合久久综合
|
日韩免费高清av
|
欧美日韩综合精品
|
一区二区三区国产
|
色拍拍在线精品视频8848
|
国产一区二区三区免费播放
|
久久综合久色欧美综合狠狠
|
亚洲日本在线天堂
|
中文精品视频
|
精品久久久久久最新网址
|
欧美大香线蕉线伊人久久国产精品
|
亚洲国产精品精华液ab
|
香蕉久久夜色精品
|
九色porny丨国产精品
|
久久综合网色—综合色88
|
亚洲精品一区二区三区av
|
日韩电影在线一区
|
久久久久久一级片
|
先锋影音久久
|
国产成人h网站
|
亚洲精品视频一区二区
|
777亚洲妇女
|
影音先锋亚洲一区
|
国内精品自线一区二区三区视频
|
日本一区二区三级电影在线观看
|
欧美日韩亚洲综合在线
|
97se亚洲国产综合自在线不卡
|
亚洲自啪免费
|
本田岬高潮一区二区三区
|
91久久线看在观草草青青
|
国产精品欧美一区喷水
|
久久福利毛片
|
99久久久国产精品免费蜜臀
|
亚洲成a人片在线不卡一二三区
|
欧美一区二区三区婷婷月色
|
一区二区三区四区五区视频
|
国产suv精品一区二区883
|
亚洲国产精品久久久久婷婷884
|