BCHAT采用DISCUZ论坛的外置验证实例
2008年10月27日基本思路是:在论坛目录下建一个chat.php来显示聊天室的登录界面,如果用户未处于论坛登陆状态就提示用户先登录,如果用户已经处于登陆状态就提示用户点击链接进入聊天室。当用户点击进入聊天室的时候是去访问chatlogin.php,这个页面提取已登陆用户的用户名进行MD5KEY的运算,生成真正进入聊天室的登陆页面并进行登陆。
chat.php放在论坛目录下,其代码如下:
<?php require_once './include/common.inc.php'; include template('chat'); ?>
再建一个模板文件chat.htm放在template/default目录下,其内容是:
{subtemplate header} <script> var focusok=false; if (navigator.appName == "Netscape") { focusok=true; } vers = navigator.appVersion; if (navigator.appName == "Microsoft Internet Explorer") { pos = vers.lastIndexOf('.'); vers = vers.substring(pos-1,vers.length); } proper_version = parseFloat(vers); if(proper_version>=5){ focusok=true; } function launchchat() { var chat = window.open ("chatlogin.php","chat","top=0,left=0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=790,height=530"); if(focusok){ chat.focus(); } return; } </script> <center> <!--{if $discuz_uid}--> 你好,$discuz_userss, <p><a href='javascript:launchchat()'><font color=red size=5>请点这里进入聊天室</font></a> </p> <!--{else}--> 请先登陆。 <!--{/if}--> {subtemplate footer}
然后再做一个chatlogin.php放在论坛目录下处理真正的登陆过程:
<?php require_once './include/common.inc.php'; echo "<html><body>"; if(!$discuz_uid){ echo "<p>您尚未进行登录,请先登录,或者<a href='http://chat.xxx.com/index_chat.asp' target=_blank>以游客身份进入聊天室>>></a>"; echo "</body></html>"; exit; }else{ echo "<p>进入聊天室..."; } $MD5KEY="md5key"; //$USERNAME=$discuz_userss; $USERNAME=iconv( "UTF-8", "gb2312//IGNORE" , $discuz_userss); $PASSWORD=md5($USERNAME.$MD5KEY); $chatport="2000"; $chatip="chat.xxx.com"; ?> <form name="chatlogin" action="http://<?php echo $chatip; ?>:<?php echo $chatport; ?>/" method="post"> <input type="hidden" name="USER" value="<?php echo $USERNAME; ?>"> <input type="hidden" name="PASS" value="<?php echo $PASSWORD; ?>"> </form> <script langauge="javascript"> document.chatlogin.submit(); </script> </body></html>
由于聊天室使用GB2312而论坛用的是UTF8,所以这里对用户名进行了一个编码转换。