discuz论坛登陆信息外部调用的几种方法

方法1:discuz登陆框是ajax调用的,一开始在firebug下看到了调用了接口:

http://home.ecjtu.net/member.php
?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login
1 http://home.ecjtu.net/member.php
2 ?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login

    这返回的是一个xml的内容,其中就一个结点root,里面会根据本地的cookies判断是否登录了论坛,如果没有登陆里面的内容就是一段form登陆表单。如果登陆了里面就是一段登陆后的信息。然后将ajax请求中的css保存到本地。能够实现登陆框调用。登陆框中有一个hidden的input name=‘reffer’ 这里面的value值是来路链接.不过要是论坛程序里的。比如将这个连接换成http://home.ecjtu.net/home.php?mod=spacecp&ac=blog这样登陆完后会自动跳转到发博客的页面。可以实现一键发帖功能。

代码如下:

<?php
$login = file_get_contents("
http://home.ecjtu.net/member.php?
mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login");
require_once('SofeeXmlParser.php');//xml解析类 博客里搜索xml有相关介绍
$xml = new SofeeXmlParser();
$xml->parseString($login);
$tree = $xml->getTree();
$login = str_replace("member.php","
http://home.ecjtu.net/member.php",$tree["root"]["value"]);
$login = str_replace("
http://home.ecjtu.net/./","http://home.ecjtu.net/home.php?
mod=spacecp&ac=blog",$login);//跳转到发帖页面
$login = preg_replace('/<h3 class="flb">(.*)<\/h3>/i','',$login);
var_dump($login);
exit();
$login = iconv('utf-8','gbk',$login);

echo $login;
?>

 
01 <?php
02 $login = file_get_contents("http://home.ecjtu.net/member.php?
03 mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login");
04 require_once('SofeeXmlParser.php');//xml解析类 博客里搜索xml有相关介绍
05 $xml = new SofeeXmlParser();
06 $xml->parseString($login);
07 $tree = $xml->getTree();
08 $login = str_replace("member.php","http://home.ecjtu.net/member.php",$tree["root"]["value"]);
10 mod=spacecp&ac=blog",$login);//跳转到发帖页面
11 $login = preg_replace('/<h3 class="flb">(.*)<\/h3>/i','',$login);
12 var_dump($login);
13 exit();
14 $login = iconv('utf-8','gbk',$login);
15   
16 echo $login;
17 ?>

sad.png

这个方法缺点是form中的内容不好改变。正则都不好匹配div class都一样...一定要按这个样式来。

 

方法2:在网上找到的方法 ,很好用。直接上代码:

<?php
    require 'source/class/class_core.php';
    $discuz = & discuz_core::instance();
    $discuz->init();  //以上是调用discuz公共执行类等核心代码
?>
<?php  if (empty($_G['uid'])) {?>
<form action="
http://localhost/bbsx2/member.php ?
mod=logging&action=login&loginsubmit=yes&infloat=yes" method="post" name="form2" onSubmit="return check()" >
用户名:<input  name="username" type="text" id="textfield2" size="13" tabindex="1" value="请输入用户名" onFocus="this.value='';" onBlur="if(this.value==''){this.value='请输入用户名';}">
密码:<input   name="password" type="password" id="password" size="12"> <input class="input_on1111" type="submit" name="button2" id="button2" value="登录">
 <a href="/bbs/member.php?mod=register"> 注册</a>
 <a href="
http://localhost/bbsx2/member.php?mod=logging&action=login&viewlostpw ">找回密码</a></form>
<?php }
 else { ?><div align="right">欢迎您:<a href="
http://localhost/bbsx2/space-uid-<?php  echo $_G['uid']; ?>.html" class="yellow">
<?php echo  $_G['username']; ?></a> <a href="
http://localhost/bbsx2/home-space-do-thread-view-me.html ">我的帖子</a>
 <a href="
http://localhost/bbsx2/home.php ">个人中心</a>
 <a href="
http://localhost/bbsx2/member-logging-action-logout-formhash-<?php  echo FORMHASH;?>.html">退出登陆</a></div><?php }?>
上面代码是因为discuz用了伪静态,或者你没有使用的话,请修改成以下代码:
<a href="
http://localhost/bbsx2/home.php?mod=space&do=thread&view=me ">我的帖子</a> 
<a href="
http://localhost/bbsx2/member.php?mod=logging&action=logout&formhash=<?php  echo FORMHASH;?>">退出登陆</a>
01 <?php
02     require 'source/class/class_core.php';
03     $discuz = & discuz_core::instance();
04     $discuz->init();  //以上是调用discuz公共执行类等核心代码
05 ?>
06 <?php  if (empty($_G['uid'])) {?>
07 <form action="http://localhost/bbsx2/member.php?
08 mod=logging&action=login&loginsubmit=yes&infloat=yes" method="post" name="form2" onSubmit="return check()" >
09 用户名:<input  name="username" type="text" id="textfield2" size="13" tabindex="1" value="请输入用户名"onFocus="this.value='';" onBlur="if(this.value==''){this.value='请输入用户名';}"
10 密码:<input   name="password" type="password" id="password" size="12"> <input class="input_on1111"type="submit" name="button2" id="button2" value="登录"
11  <a href="/bbs/member.php?mod=register"> 注册</a>
13 <?php } 
14  else { ?><div align="right">欢迎您:<a href="http://localhost/bbsx2/space-uid-<?php echo $_G['uid']; ?>.html"class="yellow">
15 <?php echo  $_G['username']; ?></a> <a href="http://localhost/bbsx2/home-space-do-thread-view-me.html">我的帖子</a> 
16  <a href="http://localhost/bbsx2/home.php">个人中心</a> 
17  <a href="http://localhost/bbsx2/member-logging-action-logout-formhash-<?php echo FORMHASH;?>.html">退出登陆</a></div><?php }?>
18 上面代码是因为discuz用了伪静态,或者你没有使用的话,请修改成以下代码:
20 <a href="http://localhost/bbsx2/member.php?mod=logging&action=logout&formhash=<?php echo FORMHASH;?>">退出登陆</a>

    这种方法可以判断用户登陆状态.本来在辅导员博客程序用这种方法最好,不过由于博客程序是smarty做的,将这段程序用了很多种方法引入smarty中不兼容。

 

方法3:直接写个静态的表单就能登陆论坛。

<form action=" http://home.ecjtu.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes " method="post" name="form2" onSubmit="return check()" >
<span class="form_tip">用户名</span><input  name="username" type="text" id="textfield2" size="13" tabindex="1" style="float:left; width:140px;" value="请输入用户名" onFocus="this.value='';" onBlur="if(this.value==''){this.value='请输入用户名';}"><br /><br />
<span class="form_tip">密码</span><input   name="password" type="password" id="password" size="12" style="float:left;width:140px;"><br /><br />
<center>tips:请用论坛号登陆<a href="
http://home.ecjtu.net/member.php?mod=logging&action=login&viewlostpw ">找回密码</a></center><br />
<input type="hidden" name="referer" value="
http://home.ecjtu.net/home.php?mod=spacecp&ac=blog " />
<center>
     <input type="submit" name="login" value="登录" />
     <a href="
http://home.ecjtu.net/member.php?mod=register "> 注册</a>
</center>
</form>
01 <form action="http://home.ecjtu.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes"method="post" name="form2" onSubmit="return check()" >
02 <span class="form_tip">用户名</span><input  name="username" type="text" id="textfield2" size="13" tabindex="1"style="float:left; width:140px;" value="请输入用户名" onFocus="this.value='';" onBlur="if(this.value==''){this.value='请输入用户名';}"><br /><br />
03 <span class="form_tip">密码</span><input   name="password" type="password" id="password" size="12"style="float:left;width:140px;"><br /><br />
04 <center>tips:请用论坛号登陆<a href="http://home.ecjtu.net/member.php?mod=logging&action=login&viewlostpw">找回密码</a></center><br />
05 <input type="hidden" name="referer" value="http://home.ecjtu.net/home.php?mod=spacecp&ac=blog" />
06 <center>
07      <input type="submit" name="login" value="登录" />
08      <a href="http://home.ecjtu.net/member.php?mod=register"> 注册</a>
09 </center>
10 </form>

这种最简单的方法居然也可以实现登陆并跳转到发帖页面。开始看discuz的登录框表单中的name值都有随机值

这是用来做crsf保护的,以为不能直接提交表单。

 

上面是几种登陆的方法。

    最后我使用了第二种方法,但引用的核心文件必须放在前面,后来放到了每页都引用的配置文件中,可以使用了,但会有一些变量函数会冲突,数据库加载的变量冲突比较多。但这种方法可以获取登陆状态,使用方便。

 

    还有一种通过JS的方式获取登陆状态的方法,代码如下:

1. 调用文件制作zx.php

<?php
require './source/class/class_core.php';
$discuz = & discuz_core::instance();
$discuz->init();
include template('common/zx');
?>

2. 调用文件模板制作zx.htm(存放在:template/default/common )

document.getElementByIdx_x('zhairu').innerHTML = ("<!--{if $_G['uid']}--><b><a href=/home.php?mod=space>{$_G[member][username]}</a></b> <!--{if $_G['group']['allowinvisible']}--><a href=/member.php?mod=switchstatus><!--{if $_G['session']['invisible']}-->{lang login_invisible_mode}<!--{else}-->{lang login_normal_mode}<!--{/if}--></a><!--{/if}--> | <a href=/home.php?mod=space&do=home>{lang my_space}</a> <a href=/home.php?mod=spacecp>{lang setup}</a> | <a href=/home.php?mod=space&do=notice>{lang remind}<!--{if $_G[member][newprompt]}-->($_G[member][newprompt])<!--{/if}--></a><span id=myprompt_check></span> | <a href=/home.php?mod=space&do=pm>{lang pm_center}<!--{if $_G[member][newpm]}-->($_G[member][newpm])<!--{/if}--></a> <!--{if $_G['group']['allowmanagearticle'] || $_G['group']['allowdiy'] || in_array($_G['uid'], $_G['setting']['ext_portalmanager'])}--> | <a href=/portal.php?mod=portalcp>{lang portal_manage}</a><!--{/if}--><!--{if $_G['uid'] && $_G['group']['radminid'] > 1}--> | <a href=/forum.php?mod=modcp&fid=$_G[fid]>{lang forum_manager}</a><!--{/if}--><!--{if $_G['uid'] && ($_G['group']['radminid'] == 1 || $_G['member']['allowadmincp'])}--> | <a href=/admin.php>{lang admincp}</a><!--{/if}--> | <a href=/member.php?mod=logging&action=logout&formhash={FORMHASH}>{lang logout}</a><!--{elseif !empty($_G['cookie']['loginuser'])}--><a >$_G['cookie']['loginuser']</a> | <a href=/member.php?mod=logging&action=login>{lang activation}</a> | <a href=/member.php?mod=logging&action=logout&formhash={FORMHASH}>{lang logout}</a><!--{else}--><a href=/member.php?mod=register>$_G['setting']['reglinkname']</a> | <a href=/member.php?mod=logging&action=login>{lang login}</a><!--{/if}-->");

3. 调用

<div id="zhairu">欢迎您</div>
<script src=/zx.php></script>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值