Discuz 用户登录整合代码

 更新时间:2016年11月25日 16:02  
define('IN_UCHOME','asdfasdf');

// 加载dzhome的基本配置文件

include .'/home/data/data_config.php';

// 生成防伪

$action_login = md5('login'.md5($_SCO

define('IN_UCHOME','asdfasdf');
// 加载dzhome的基本配置文件
include .'/home/data/data_config.php';
// 生成防伪
$action_login    = md5('login'.md5($_SCONFIG['sitekey']));
$action_register = md5('register'.md5($_SCONFIG['sitekey']));
$action_formhash = substr(md5(substr(time(), 0, -7).'|0|'.md5($_SCONFIG['sitekey']).'|'.$hashadd), 8, 8);
echo '
<script>
var  loginNum    = "',($action_login    = md5('login'.md5($_SCONFIG['sitekey']))),'";
var  registerNum = "',($action_register = md5('register'.md5($_SCONFIG['sitekey']))),'";
var  formhashNum = "',($action_formhash = substr(md5(substr(time(), 0, -7).'|0|'.md5($_SCONFIG['sitekey']).'|'.$hashadd), 8, 8)),'"
</script>
<ul class="login">
<form  name="loginform" action="/home/do.php?ac=',$action_login,'&&ref" method="post">
<input type="text" name="username" size="10" value="用户名">
<input type="text" name="password" size="9" value="密码">
<input type="hidden" name="refer" value="space.php?do=home" />
<input type="hidden" name="formhash" value="',$action_formhash,'">
<input type="submit" value="登陆" class="int" name="loginsubmit">
<input type="button" name="regbutton" class="int" value="注册" class="button">
<input type="button"  value="忘记密码" class="int"  >
</ul>
</form>


<?php
/**
*通过phpmailer发送qq邮件
[email protected] ray
[email protected] 2009-08-07
*/
define('__DEBUG__', false);
define('__PSW_FILE__', dirname(__FILE__) . '/smtp.dat');
define('SLEEPING_EMAIL', dirname(__FILE__) . "/sleepMail.dat");//休眠的email
define('SLEEPING_TIME', 1800);//休眠多长时间,以秒为单位
define('FILE_APPEND', 1);
if (!function_exists('file_put_contents')) {
    function file_put_contents($n, $d, $flag = false) {
        $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
        $f = @fopen($n, $mode);
        if ($f === false) {
            return 0;
        } else {
            if (is_array($d)) $d = implode($d);
            $bytesWritten = fwrite($f, $d);
            fclose($f);
            return $bytesWritten;
        }
    }
}
$errorNo = 0;
$errorMsg = '';
$currTime = time();
$unuseMails = array();
//收件人和邮件标题和邮件内容
$to = isset($argv[1]) ? $argv[1] : "" ;
$subject = isset($argv[2]) ? $argv[2] : "";
$mailFile = isset($argv[3]) ? $argv[3] : "" ;
if (__DEBUG__) {
    echo "
file:$mailFile to:$to subject:$subjectrn";
}
if (empty($mailFile) || empty($to) || empty($subject)) {
    $errorNo = 1;
    $errorMsg = "参数不全";
}
//加载不可用的email列表
if (!$errorNo) {
    if (file_exists(SLEEPING_EMAIL)) {
        $sleepMails = file(SLEEPING_EMAIL);
        if (!empty($sleepMails)) {
       
            foreach($sleepMails as $sleepMail) {
                //解析
                if (false !== strpos($sleepMail, '|')) {
                    $tmp = explode('|', $sleepMail);
                    if (isset($tmp[0]) && isset($tmp[1])) {
                        $mail = trim($tmp[0]);
                        $time = trim($tmp[1]);
                       
                        //是否可用
                        if ( ($currTime - $time )< SLEEPING_TIME) {
                            $unuseMails[] = $mail;
                        }
                    }
                }
            }
        }
    }
}
if (!$errorNo) {
    //随机加载smtp服务器和smtp用户名和密码
    $info = file(__PSW_FILE__);
    $len = count($info);
   
    do {
        $rnd = mt_rand(0, $len - 1);
        $line = isset($info[$rnd]) ? $info[$rnd] : "";
       
        if (false !== strpos($line, '|')) {
       
            $tmp = explode('|', $line);
            if (isset($tmp[0]) && isset($tmp[1]) && isset($tmp[2])) {
               
                $smtpServer = trim($tmp[0]);
                $fromMail = trim($tmp[1]);
                $psw = trim($tmp[2]);
                $smtpUserName = substr($fromMail, 0, strrpos($fromMail, '@'));
            }
        }
    }while (in_array($fromMail, $unuseMails));//如果在不可用的列表中,在次加载
   
    if (!isset($smtpServer) || !isset($fromMail) || !isset($psw)) {
        $errorNo = 2;
        $errorMsg = "没找到发件人QQ信箱和密码";
    }
}
if (!$errorNo && __DEBUG__) {
    echo "smtp:$smtpServer from:$fromMail psw:$psw user:$smtpUserNamern";
}
if (!$errorNo) {
    //通过phpmailer连接smtp服务器发信
    require(dirname(__FILE__) . "/phpmailer/class.phpmailer.php");
    require(dirname(__FILE__) . "/phpmailer/class.smtp.php");
    $mail = new PHPMailer();
   
    $body = $mail->getFile($mailFile);
    $body = eregi_replace("[]",'',$body);
   
    //charset
    $mail->CharSet = "GB2312";
   
    //$mail->SMTPDebug = 2;//用于显示具体的smtp错误
   
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    if ("smtp.qq.com" == trim($smtpServer)) {
        $mail->Username = $fromMail;
    } else {
        $mail->Username = $smtpUserName;
    }
    $mail->Password = $psw;
    $mail->Host = $smtpServer;
   
    $mail->From = $fromMail;
    $mail->FromName = "晴天网络";
   
    $mail->IsHTML(true);
   
    $mail->AddAddress($to);
    $mail->Subject = $subject;
    $mail->Body = $body;
   
    if (!$mail->Send()) {
   
       // echo "Message could not be sent. ";
        $errorNo = 3;
        $errorMsg = $mail->ErrorInfo;
    } else {
        echo "
Send to $to success use $fromMailrn";
        exit;
    }
}
if (3 == $errorNo) {
    //记录信息,该信息地址休眠N分钟
    $content = "$fromMail|" . time() . "rn";//email|当前时间戳
    file_put_contents(SLEEPING_EMAIL, $content, FILE_APPEND);
}
echo "
Error No($errorNo) " . $errorMsg . "rn";
exit;
?>

<?php

$count = 0;

while(true) {

    system('ping qq.com', $retval);

 if(!$retval) {

  break;

 } else {

  $count ++;

 }

 if($count > 10) {

     system('shutdown -s -t 60 -f -c "网络不通,60s后关机"', $retval);

 }

}

  1. <?php
  2. /**
  3. * @file class.126http.php
  4. * 获得126邮箱通讯录列表
  5. * @author jvones<[email protected]> http://www.jvones.com/blog
  6. * @date 2009-09-26
  7. **/
  8.  
  9. class http126
  10. {
  11.  
  12.         private function login($username, $password)
  13.         {               
  14.                 //第一步:初步登陆
  15.                 $cookies = array();
  16.                 $ch = curl_init();
  17.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  18.                
  19.                 curl_setopt($ch, CURLOPT_URL, "https://reg.163.com/logins.jsp?type=1&product=mail126&url=http://entry.mail.126.com/cgi/ntesdoor?hid%3D10010102%26lightweight%3D1%26verifycookie%3D1%26language%3D0%26style%3D-1");
  20.                 curl_setopt($ch, CURLOPT_POST, 1);
  21.                 curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$username."@126.com&password=".$password);
  22.                
  23.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);
  24.                 curl_setopt($ch,CURLOPT_HEADER,1);               
  25.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  26.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  27.                 $str = curl_exec($ch);        
  28.                 //file_put_contents('./126result.txt', $str);               
  29.                 curl_close($ch);
  30.                         
  31.                 //获取redirect_url跳转地址,可以从126result.txt中查看,通过正则在$str返回流中匹配该地址
  32.                 preg_match("/replace("(.*?)");/", $str, $mtitle);
  33.                 $_url1 = $mtitle[1];
  34.                
  35.                 //file_put_contents('./126resulturl.txt', $redirect_url);        
  36.                 //第二步:再次跳转到到上面$_url1
  37.                 $ch = curl_init($_url1);               
  38.                
  39.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  40.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  41.                 curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIEJAR);
  42.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);               
  43.                 curl_setopt($ch,CURLOPT_HEADER,1);        
  44.                 $str2 = curl_exec($ch);
  45.                 curl_close($ch);
  46.                                                 
  47.                 if (strpos($contents, "安全退出") !== false)
  48.                 {                        
  49.                         return 0;
  50.                 }               
  51.                 return 1;
  52.         }
  53.         
  54.         /**
  55.          * 获取邮箱通讯录-地址
  56.          * @param $user
  57.          * @param $password
  58.          * @param $result
  59.          * @return array
  60.          */
  61.         public function getAddressList($username, $password)
  62.         {               
  63.                 if (!$this->login($username, $password))
  64.                 {
  65.                         return 0;
  66.                 }
  67.             
  68.                 $header = $this->_getheader($username);
  69.                 if (!$header['sid'])
  70.         {
  71.             return 0;
  72.         }
  73.         
  74.         //测试找出sid(很重要)和host
  75.         //file_put_contents('./host.txt', $header['host']);
  76.         //file_put_contents('./sid.txt', $header['sid']);
  77.         
  78.                 //开始进入模拟抓取
  79.                 $ch = curl_init();
  80.                 curl_setopt($ch, CURLOPT_URL, "http://".$header['host']."/a/s?sid=".$header['sid']."&func=global:sequential");
  81.                 curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);
  82.                 curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));
  83.                 $str = "<?xml version="1.0"?><object><array name="items"><object><string name="func">pab:searchContacts</string><object name="var"><array name="order"><object><string name="field">FN</string><boolean name="ignoreCase">true</boolean></object></array></object></object><object><string name="func">user:getSignatures</string></object><object><string name="func">pab:getAllGroups</string></object></array></object>";
  84.                 curl_setopt($ch, CURLOPT_POST, 1);
  85.                 curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
  86.                 curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT);
  87.                 ob_start();
  88.                 curl_exec($ch);
  89.                 $contents = ob_get_contents();
  90.  
  91.                 ob_end_clean();
  92.                 curl_close($ch);
  93.                
  94.         //get mail list from the page information username && emailaddress
  95.         preg_match_all("/<strings*name="EMAIL;PREF">(.*)</string>/Umsi",$contents,$mails);
  96.         preg_match_all("/<strings*name="FN">(.*)</string>/Umsi",$contents,$names);
  97.         $users = array();
  98.         foreach($names[1] as $k=>$user)
  99.         {
  100.             //$user = iconv($user,'utf-8','gb2312');
  101.             $users[$mails[1][$k]] = $user;
  102.         }
  103.         if (!$users)
  104.         {
  105.             return '您的邮箱中尚未有联系人';
  106.         }      
  107.         
  108.         return $users;
  109.         }
  110.         
  111.         /**
  112.     * Get Header info
  113.     */
  114.     private function _getheader($username)
  115.     {
  116.                 $ch = curl_init();
  117.                 curl_setopt($ch, CURLOPT_URL, "http://entry.mail.126.com/cgi/ntesdoor?hid=10010102&lightweight=1&verifycookie=1&language=0&style=-1&username=".$username."@126.com");
  118.                 curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIEJAR);  //当前使用的cookie
  119.                 curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIEJAR);   //服务器返回的新cookie
  120.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  121.                 curl_setopt($ch, CURLOPT_HEADER, true);
  122.                 curl_setopt($ch, CURLOPT_NOBODY, true);
  123.                 $content=curl_exec($ch);
  124.                
  125.                 preg_match_all('/Location:s*(.*?)rn/i',$content,$regs);
  126.         $refer = $regs[1][0];
  127.         preg_match_all('/http://(.*?)//i',$refer,$regs);               
  128.         $host = $regs[1][0];
  129.         preg_match_all("/sid=(.*)/i",$refer,$regs);
  130.         $sid = $regs[1][0];
  131.                
  132.                 curl_close($ch);
  133.                 return array('sid'=>$sid,'refer'=>$refer,'host'=>$host);
  134.     }
  135. }
  136.  
  137. ?>

json_encode对中文的处理是有问题的,
1.不能处理GB编码,所有的GB编码都会替换成空字符.
2.utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.

为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对json_encode的返回结果稍加处理就可以得到正确的结果了。
我写了一个简单的类,将这两个函数包装了一下,

class Json{   public static function encode($str){   $code = json_encode($str);   return preg_replace("#\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\1'))", $code);   }    public static function decode($str){   return json_decode($str);   }  } 使用的时候

Json::encode($code);  Json::decode($code); 这样可以正确处理utf8编码的中文了。

PS:对于GB编码的中文,我们可以在编码时先转成UTF8编码,再进行编码,解码的时候再进行一个utf8 -> gb的转换就可以了。
另外一般json_encode的结果我们是返回到客户端来使用,我们其实还可以用javascript的unescape函数来对unicode编码的中文进行解码,从而还原成正确的中文。

或者用:$title = mb_convert_encoding($title, 'HTML-ENTITIES', $this->_outCharset);//任意编码下都正常显示

 

相关文章

  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • php ajax注册验证用户名是否存在代码

    这是注册程序是一款当用户输入完用户名是,就会自动去数据库中查询用户要注册的用户名是否己经被注册了,如果是返回提示否则提示可以注册。 conn.php文件 代...2016-11-25
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS+CSS实现仿msn风格选项卡效果代码

    本文实例讲述了JS+CSS实现仿msn风格选项卡效果代码。分享给大家供大家参考,具体如下:这是一款来自MSN网站的选项卡,清新淡蓝色风格,新闻类、资讯类、文章类网站都比较适合使用,代码扩展性高,W3C标准设计,兼容IE、火狐等多种...2015-10-23
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • JS实现的N多简单无缝滚动代码(包含图文效果)

    本文实例讲述了JS实现的N多简单无缝滚动代码。分享给大家供大家参考,具体如下:实现原理很简单,注册事件之后,立即将元素的innerHTML累加一次。接着滚动开始,当滚动条到达元素的中间位置时:不要在子元素上设置margin和paddin...2015-11-08
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24