discuz判断⽤户登录
在include/common.inc.php ⽂件。程序开始先判断是否有cookie存到了sid值,然后解密cookie['auth']这个⽤户登录状态加密字符串,如果解密出来有uid值表⽰⽤户已登录。接下来是想要得到⽤户的基本信息。如果有uid则直接到members表查,如果没有,则根据是否有sid值要不要到sessions表查(如果有sid,则到sessions查,因为在页⾯执⾏过程中footer.html模板执⾏了updatesession函数,这个函数是记录在线⽤户的,已sid作为关键字,如果已登录则⼀起把⽤户信息存⼊,如果没有则只单存⼊sid值,还是以sid作为表搜索主关键字插⼊⼀条新的记录。这个就解释了上⾯讲的为什么当解密出来没有uid值时当有sid值时到session查⽤户信息,查到还是没有⽤户信息时才判定⽤户没有登录了)。
当这整个执⾏下来既没有sid值⼜没有⽤户信息则表⽰该⽤户第⼀次登录或者cookie值已过期,则random(6)随机给6位数给$sid变量,然后在common.inc.php程序⼤概300⾏左右有判断是否存在sid值并且没有cookie('sid')值时,⽤cookie存下sid值。这样⽤户再次访问时就肯定存有sid值(除⾮已过期)。这样的话在sessions⾥就⽤这个⽤户,则记下来当前在线⼈数。
discuz还有人用吗⽽同步登录的login函数中,则cookie('sid','',-84000*365)掉,其他的正常cookie,这个理解了很久。我的理解是:⽤户既然不在discuz登录的,是在别的地⽅登录,则表明没有在论坛呆过(或者就这样强⾏的指定没有浏览过,不考虑以前浏览过,还有sid值。因为updatesession函数会给15分钟未在线的⽤户的记录给删除了)或者说就强⾏让sid重新⽣成。重新插⼊⼀条新的记录到sessions表中去。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论