discuz论坛登陆信息外部调用的几种方法 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的inputname=‘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();
discuz论坛登陆信息外部调用的几种方法 discuz门户调用论坛
$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>(.*)</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"]);
09$login= str_replace("http://home.ecjtu.net/./","http://home.ecjtu.net/home.php?
10mod=spacecp&ac=blog",$login);//跳转到发帖页面
11$login= preg_replace('/<h3>(.*)</h3>/i','',$login);
12var_dump($login);
13exit();
14$login= iconv('utf-8','gbk',$login);
15
16echo$login;
17?>

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

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

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

<formaction="http://home.ecjtu.net/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes"method="post" name="form2" onSubmit="return check()">
<span>用户名</span><inputname="username" type="text" id="textfield2" size="13" tabindex="1" value="请输入用户名"onFocus="this.value='';"onBlur="if(this.value==''){this.value='请输入用户名';}"><br/><br />
<span>密码</span><inputname="password" type="password" id="password" size="12"><br/><br />
<center>tips:请用论坛号登陆<ahref="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<formaction="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><inputname="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><inputname="password" type="password"id="password" size="12"style="float:left;width:140px;"><br/><br />
04<center>tips:请用论坛号登陆<ahref="http://home.ecjtu.net/member.php?mod=logging&action=login&viewlostpw">找回密码</a></center><br/>
05<inputtype="hidden" name="referer"value="http://home.ecjtu.net/home.php?mod=spacecp&ac=blog"/>
06<center>
07<inputtype="submit" name="login"value="登录" />
08<ahref="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><ahref=/home.php?mod=space>{$_G[member][username]}</a></b><!--{if$_G['group']['allowinvisible']}--><ahref=/member.php?mod=switchstatus><!--{if$_G['session']['invisible']}-->{langlogin_invisible_mode}<!--{else}-->{langlogin_normal_mode}<!--{/if}--></a><!--{/if}-->| <ahref=/home.php?mod=space&do=home>{langmy_space}</a> <ahref=/home.php?mod=spacecp>{langsetup}</a> | <ahref=/home.php?mod=space&do=notice>{langremind}<!--{if$_G[member][newprompt]}-->($_G[member][newprompt])<!--{/if}--></a><spanid=myprompt_check></span>| <ahref=/home.php?mod=space&do=pm>{langpm_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'])}--> |<ahref=/portal.php?mod=portalcp>{langportal_manage}</a><!--{/if}--><!--{if$_G['uid'] &&$_G['group']['radminid'] > 1}--> |<ahref=/forum.php?mod=modcp&fid=$_G[fid]>{langforum_manager}</a><!--{/if}--><!--{if$_G['uid'] &&($_G['group']['radminid'] == 1 ||$_G['member']['allowadmincp'])}--> |<a href=/admin.php>{langadmincp}</a><!--{/if}-->| <ahref=/member.php?mod=logging&action=logout&formhash={FORMHASH}>{langlogout}</a><!--{elseif!empty($_G['cookie']['loginuser'])}--><a>$_G['cookie']['loginuser']</a>| <ahref=/member.php?mod=logging&action=login>{langactivation}</a> | <ahref=/member.php?mod=logging&action=logout&formhash={FORMHASH}>{langlogout}</a><!--{else}--><ahref=/member.php?mod=register>$_G['setting']['reglinkname']</a>| <ahref=/member.php?mod=logging&action=login>{langlogin}</a><!--{/if}-->");

3. 调用

<divid="zhairu">欢迎您</div>
<scriptsrc=/zx.php></script>



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

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/265598.html

更多阅读

车辆保险查询的几种方法 如何查询车辆保险

对于已经投保了车险的车主来说,很多人都希望随时了解保单信息以及发生事故后的理赔信息。这就需要借助车辆保险查询这一手段,目前车主可通过拨打保险公司电话或是登陆相关网站实现这一目标。车辆保险查询的几种方法——步骤/方法车辆

家用不锈钢电水壶除垢的几种方法 电水壶除水垢

家用不锈钢电水壶除垢的几种方法——简介 不锈钢电水壶,作为一种常用家用小家电,在外山设计上并没有多少的特点,在使用过程中在常出现的现象就是在内壁上附着的水垢,不锈钢电水壶水垢,不仅会影响电水壶的使用效率,同时还对电水壶的使用寿

查询工商银行卡余额的几种方法 工商银行余额查询

查询工商银行卡余额的几种方法——简介 使用了工行银行一段时间了,有一天突然想查询工商银行卡上的余额了该怎么查询了,下面教你怎么查询。查询工商银行卡余额的几种方法——工具/原料拥有一张工行的银行卡,知道密码。查询工商银行卡

白凡士林治疗牛皮癣(银屑病)的几种方法介绍 银屑病治疗方法

一、什么是白凡士林白凡士林,WHITEVASELIN,是从石油中得到的多种烃的半固体混合物,为白色均匀的软膏状物;无臭或几乎无臭;与皮肤接触有滑腻感;具有一定的拉丝性。凡士林非常便宜,很多爱美的女士因此对它不屑一顾。事实上,与市场上其他更加

让笔记本电脑无线上网的几种方法 台式机无线上网

相信现在很多朋友都使用轻便笔记本, 对于电脑基础不是很好朋友, 笔记本无线上网就成为一个难题, 不像台式机直接上网线就可以了, 笔记本一般都不会固定在一个位置, 能无线上网才能最大的发挥用处. 这里就告诉你让笔记本电脑无线上网

声明:《discuz论坛登陆信息外部调用的几种方法 discuz门户调用论坛》为网友我一直在啊分享!如侵犯到您的合法权益请联系我们删除