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
1http://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?
03mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login");
04require_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"]);
10mod=spacecp&ac=blog",$login);//跳转到发帖页面
11$login = preg_replace('/<h3 class="flb">(.*)<\/h3>/i','',$login);
12var_dump($login);
13exit();
14$login = iconv('utf-8','gbk',$login);
15  
16echo $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?
08mod=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用了伪静态,或者你没有使用的话,请修改成以下代码:

    这种方法可以判断用户登陆状态.本来在辅导员博客程序用这种方法最好,不过由于博客程序是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>



参考原文:discuz论坛登陆框外部调用的几种方法Js全站调用discuzX 的用户登录信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值