|
|
楼主 |
发表于 2011-8-15 09:27:24
|
显示全部楼层
Section Four:
- $newpm = $newpmexists = $sessionexists = $seccode = $bloguid = 0;//初始化变量
- $membertablefields = '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.groupexpiry, m.extgroupids, m.email, m.timeoffset, m.tpp, m.ppp, m.posts, m.digestposts,
- m.oltime, m.pageviews, m.credits, m.extcredits1, m.extcredits2, m.extcredits3, m.extcredits4, m.extcredits5,
- m.extcredits6, m.extcredits7, m.extcredits8, m.timeformat, m.dateformat, m.pmsound, m.sigstatus, m.invisible,
- m.lastvisit, m.lastactivity, m.lastpost, m.newpm, m.accessmasks, m.xspacestatus, m.editormode, m.customshow';
- if($sid) {
- if($discuz_uid) {
- $query = $db->query("SELECT s.sid,
- s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews,
- s.lastolupdate, s.seccode, $membertablefields
- FROM {$tablepre}sessions s, {$tablepre}members m
- WHERE m.uid=s.uid AND s.sid='$sid' AND
- CONCAT_WS('.',s.ip1,s.ip2,s.ip3,s.ip4)='$onlineip' AND
- m.uid='$discuz_uid'
- AND m.password='$discuz_pw' AND m.secques='$discuz_secques'");
- } else {
- $query = $db->query("SELECT sid, uid AS
- sessionuid, groupid, groupid='6' AS ipbanned, pageviews AS spageviews,
- styleid, lastolupdate, seccode
- FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");
- }
- if($_DSESSION = $db->fetch_array($query)) {
- $sessionexists = 1;
- if(!empty($_DSESSION['sessionuid'])) {
- $query = $db->query("SELECT $membertablefields
- FROM {$tablepre}members m WHERE uid='$_DSESSION[sessionuid]'");
- $_DSESSION = array_merge($_DSESSION, $db->fetch_array($query));
- }
- } else {
- $query = $db->query("SELECT sid, groupid,
- groupid='6' AS ipbanned, pageviews AS spageviews, styleid, lastolupdate,
- seccode
- FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");
- if($_DSESSION = $db->fetch_array($query)) {
- clearcookies();
- $sessionexists = 1;
- }
- }
- }复制代码
- 这一段是有蛮长的,不过看着长不代表它就难,第一行是初始化变量用的(无论何时用变量都要考虑初始化,要不然安全性不值得一提,一个get就完了)
- 接下来是判断是不是有sid,有的话就从cdb_session表中取来,然后连接一下cdb_members表取出一些更具体的东西,具体是哪些东西?
- 在$membertablefields这个变量里面已经全面写出来了,对应数据库看吧,不看的话用英语猜猜得出的。。。在这里Discuz标记了一个
- sessionexist变量,表示这个会员是在线的。
- if(!$sessionexists) {
- if($discuz_uid) {
- $query = $db->query("SELECT $membertablefields
- FROM {$tablepre}members m WHERE
- m.uid='$discuz_uid' AND m.password='$discuz_pw' AND
- m.secques='$discuz_secques'");
- if(!($_DSESSION = $db->fetch_array($query))) {
- clearcookies();
- }
- }复制代码
- 要是不存在sid,不存在discuz_uid,那就肯定没有登陆了,清掉cookie,要是有$discuz_uid的话,还是从members表中取出信息存放到$_DSESSION数组中
- if(ipbanned($onlineip)) $_DSESSION['ipbanned'] = 1;
- $_DSESSION['sid'] = random(6);
- $_DSESSION['seccode'] = random(6, 1);
- }
- $_DSESSION['dateformat'] = empty($_DSESSION['dateformat']) ? $_DCACHE['settings']['dateformat'] : $_DSESSION['dateformat'];
- $_DSESSION['timeformat'] = empty($_DSESSION['timeformat']) ?
- $_DCACHE['settings']['timeformat'] : ($_DSESSION['timeformat'] == 1 ?
- 'h:i A' : 'H:i');
- $_DSESSION['timeoffset'] = isset($_DSESSION['timeoffset'])
- && $_DSESSION['timeoffset'] != 9999 ? $_DSESSION['timeoffset'] :
- $_DCACHE['settings']['timeoffset'];复制代码
- 这个是判断ip是不是在被阻止的list里,是的话就标记一下,用$_DSESSION[‘ipbanned’]标记的。再把一个随机的sid和seccode写到$_DSESSION数组。然后接下来是把日期,时间,时差写入$_DSESSION这个变量。
- $membertablefields = '';
- @extract($_DSESSION);
- $lastvisit = empty($lastvisit) ? $timestamp - 86400 : $lastvisit;
- $timenow = array('time' => gmdate("$dateformat $timeformat", $timestamp + 3600 * $timeoffset),
- 'offset' => ($timeoffset >= 0 ? ($timeoffset == 0 ? '' : '+'.$timeoffset) : $timeoffset));
- if(PHP_VERSION > '5.1') {
- @date_default_timezone_set('Etc/GMT'.($timeoffset > 0 ? '-' : '+').(abs($timeoffset)));
- }复制代码
- 又见变量初始化,然后是把$_DESSION给展开,这样方便多了。接下来判断是不是有上次访问的时间,有的话就没事,没有的话就减去24小时。
- 接下来给一个现在的时间,这里有一个时间的问题,所以把时间加上时差乘上3600秒就得到当前时间了。
- PHP 5 能处理时差了,所以Discuz在这里也设置了一下,想得真全面!!
-
复制代码
|
|