BCHAT登录与UCHOME的结合
2008年11月2日UCHOME是一个非常方便的SNS网站程序,可以用UCHOME登录用户,然后以MD5KEY的方式让已登录用户可以直接进入聊天室,从而实现两者的整合。
在UCHOME目录下建一个chat.php来显示聊天室的登录界面,如果用户未处于登录状态就提示用户输一个聊天名字,如果用户已经处于登陆状态就提示用户点击选择进入聊天室。当用户点击进入聊天室的时候是去访问chatlogin.php,这个页面提取已登陆用户的用户名进行MD5KEY的运算,生成真正进入聊天室的登陆页面并进行登陆。
chat.php放在UCHOME目录下,其代码如下:
<?php include_once('./common.php'); $_TPL['titles'] = array('聊天'); include template('header'); ?> <style type="text/css"> #listdiv{ width:500px; margin:20px 20px 20px 20px; } #listdiv ul,li{ list-style:none; padding:0; } #listdiv li{ width:220px; float:left; margin:0px;padding:0px; line-height:25px} #listdiv p{color:Gray} #listdiv span{color:Gray} #listdiv .roomname{color:#886349} </style> <script language="JavaScript"> function b(pport,phost,roomid) { if(validname(document.form1.elements[0])){ document['form1'].action='chatlogin.php'; document['form1'].ROOMID.value=roomid; document['form1'].HOST.value=phost; document['form1'].PORT.value=pport; launchchat(); document['form1'].method='post'; document.form1.submit(); } } function validname(str1) { var s,i,j; if (str1.value.length <1) { alert("请输入您的大名,名字不能为空!"); str1.focus(); return false; } s="'#&*\""; str=str1.value.toString(); for (i=0; i<str.length; i++) { for(j=0;j<s.length;j++){ if (str.charAt(i) == s.charAt(j)) { alert("名字中不能包含特殊字符: # & * ."); str1.focus(); return false; } } } return true; } 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("","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 true; } </script> <div id="listdiv"> <?php if($_SGLOBAL['username']){ ?> <p>你好,<?php echo $_SGLOBAL['username']; ?> </p> <form action=/ method=post name=form1 target="chat" align="center"> <input type="hidden" name="USER" value="<?php echo $_SGLOBAL['username']; ?>"> <input type="hidden" name="PASS" value="<?php echo $PASSWORD; ?>"> <input type="hidden" name="ROOMID"> <input type="hidden" name="HOST"> <input type="hidden" name="PORT"> </form> <?php }else{ ?> <p> <form action=/ method=post name=form1 target="chat" align="center"> 您尚未登陆,请输一个进聊天室所用的游客名字: <input type="text" name="USER" size="6" MAXLENGTH="15" value="游客"> <input type="hidden" name="PASS" value=""> <input type="hidden" name="ROOMID"> <input type="hidden" name="HOST"> <input type="hidden" name="PORT"> </form> </p> <?php } ?> <p>请点击聊天室名称前面的小圈进入聊天室: <ul> <?php $conn=odbc_connect('chatdb','',''); if (!$conn) {exit("Connection Failed: " . $conn);} $sql="SELECT * FROM room"; $rs=odbc_exec($conn,$sql); if (!$rs) {exit("Error in SQL");} while (odbc_fetch_row($rs)) { $my_port=odbc_result($rs,"port"); $my_host=odbc_result($rs,"host"); if ($my_port>65535) { $my_roomid= $my_port%1000; $my_port=floor($my_port/1000); }else{ $my_roomid=0; } $my_roomname=iconv( "gb2312", "UTF-8//IGNORE" , odbc_result($rs,"roomname")); $my_num=odbc_result($rs,"num"); echo "<li>\r\n"; echo "<input name=\"r\" onclick=\"if(this.checked){b('".$my_port."','".$my_host."','".$my_roomid."')}\" type=\"radio\">\r\n"; echo "<span class=\"roomname\">".$my_roomname."</span><span>(".$my_num."人)</span>\r\n"; echo "</li>\r\n"; } odbc_close($conn); ?> </ul> </p> </div> <div class="f_status f_status_w s_clear"> <a href="javascript:;" onclick="window.scrollTo(0,0);" id="a_top" title="TOP">TOP</a> </div> <?php include template('footer'); ?> |
chatlogin.php也是放在UCHOME目录下,代码如下:
<?php include_once('./common.php'); $chatip=$_POST['HOST']; $chatport=$_POST['PORT']; $roomid=$_POST['ROOMID']; $USERNAME=$_POST['USER']; $PASSWORD=$_POST['PASS']; if($_SGLOBAL['username']){ $MD5KEY="md5key"; $USERNAME=iconv( "UTF-8", "gb2312//IGNORE" , $_SGLOBAL['username']); $PASSWORD=md5($USERNAME.$MD5KEY); }else{ $USERNAME=iconv( "UTF-8", "gb2312//IGNORE" , $USERNAME); } ?> <html><body> <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; ?>"> <input type="hidden" name="ROOMID" value="<?php echo $roomid; ?>"> </form> <script langauge="javascript"> setTimeout("document.chatlogin.submit()",1); </script> </body></html> |
由于聊天室使用GB2312而UCHOME用的是UTF8,所以这里对用户名进行了一个编码转换。
chat.php文件以UTF8编码格式保存,而chatlogin.php要以GB2312编码保存。