在做Discuz!NT 2.0与自己的系统整合过程中,使用的是Discuz!NT 2.0的用户数据作为我的用户数据。
把Discuz!NT 2.0文件存放入bbs目录,把bbs目录设置为虚拟目录。把DNT.config拷贝到根目录。

登录很简单直接设置表单吧
<form action="bbs/login.aspx?reurl=<%= reurl %>" method="post">
<div >忘记密码?</a>
  </div>
  </form>
 </div>
</div>
</form>


reurl 的值

    protected string reurl = string.Empty;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.UrlReferrer != null)
            reurl = HttpUtility.UrlEncode(Request.UrlReferrer.PathAndQuery);
        else
            reurl = HttpUtility.UrlEncode("/default.aspx");
    }



通过以下代码拿到了用户ID

        if (Request.Cookies.Count > 0)
        {
            
int uid = 0;
            
if (Request.Cookies["dnt"!= null && Request.Cookies["dnt"].Values["userid"!= null)
                
int.TryParse(Request.Cookies.Get("dnt").Values.Get("userid"), out uid);


读取一个XML文件获取人物信息。因为我在配置过程中总是有配置文件目录存放错误问题,因此,直接用了个XML文件,不用去仔细看目录怎么配置了。
discuz nt整合登陆XmlTextReader reader = new XmlTextReader("http://localhost/bbs/UserXML.aspx?u=" + uid + "&rd=" + rd.Next(10000).ToString());

XML文件代码是这样的
discuz nt整合登陆<%@ Page Language="C#" AutoEventWireup="false" EnableViewState="false" Codebehind="UserXML.aspx.cs" %>
discuz nt整合登陆
<%@ Import namespace="System.Data" %>
discuz nt整合登陆
<%@ Import namespace="Discuz.Common" %>
discuz nt整合登陆
<%@ Import namespace="Discuz.Forum" %>
discuz nt整合登陆
<%@ Import namespace="Discuz.Entity" %>
discuz nt整合登陆
discuz nt整合登陆
<script runat="server">
discuz nt整合登陆
override protected void OnInit(EventArgs e)
>

做退出的时候要取userkey,我看了他的源代码
aspx/1/usercp.aspx的退出链接是这样的,在101行
templateBuilder.Append("   <a href=\"" + forumurl.ToString() + "logout.aspx?userkey=" + userkey.ToString() + "\" class=\"reg\">退出</a>\r\n");

从第一行<%@ Page language="c#" Codebehind="usercp.aspx.cs" AutoEventWireup="false" EnableViewState="false" Inherits="Discuz.ForumPage.usercp" %>看到该页使用了Dll文件里的usercp类。经查看是Discuz.Web.Dll里的usercp类,其父类是Discuz.Web.UI.Dll里的BasePage,而这个userkey正是在BasePage类定义的字段。

在BasePage的构造函数中给userkey赋值了
    this.userid = this.oluserinfo.Userid;
    this.usergroupid = this.oluserinfo.Groupid;
    this.username = this.oluserinfo.Username;
    this.password = this.oluserinfo.Password;
    if (this.password.Length > 0x10)
    {
        this.userkey = this.password.Substring(4, 8).Trim();
    }
    else
    {
        this.userkey = "";
    }

根据这样我也就可以给我使用的userkey赋值为
            while (reader.Read())
            {
                if (reader.Name.Equals("username"))
                    username = reader.ReadInnerXml();
                if (reader.Name.Equals("userid"))
                    userid = ConvertHelper.str_to_int(reader.ReadInnerXml());
                if (reader.Name.Equals("userkey"))
                {
                    string password = reader.ReadInnerXml();
                    if(password.Length > 0x10)
                        userkey = password.Substring(4, 8).Trim(); ;
                }
            }



Dll里实际退出代码是这样的
discuz nt整合登陆protected override void ShowPage()

相关文章: