Discuz!NT官方社区

首页 » Discuz!NT开发与测试 » Discuz!NT插件开发 » .Net2.0整合登陆
gcpony - 2007-4-28 20:31:00
看到不少人写将已有的项目和论坛整合,我也来献丑啦!我想在网站的其他的地方也可以登陆与显示用户登陆信息,所以就新建一用户控件UserLogin.ascx

html:
<%@ Register TagPrefix="UControl" Namespace="tc.bbs.Themes" %>
<DIV class="lframe">
<TABLE cellSpacing="0" cellPadding="0" width="95%">
  <TBODY>
  <TR>
    <TD class="tl"></TD>
    <TD class="tm"><SPAN class="tt">会员登陆</SPAN>
    </TD>
    <TD class="tr"></TD>
  </TR>
  </TBODY>
</TABLE>
<TABLE cellSpacing="0" cellPadding="0" width="95%" id="loginTable" runat=server>
  <TBODY>
  <TR>
    <TD class="ml"></TD>
    <TD class="mm">
    <table border="0">
      <tr>
      <td align="right">用户名:</td>
      <td align="left"><asp:TextBox class="inputbg" id="userName" runat="server" Width="80px"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="userName"
                                    ErrorMessage="*"></asp:RequiredFieldValidator></td>
      </tr>
      <tr>
      <td align="right">密  码:</td>
      <td align="left"><asp:TextBox class="inputbg" id="userPWD" runat="server" Width="80px"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="userPWD"
                                    ErrorMessage="*"></asp:RequiredFieldValidator></td>
      </tr>
      <tr>
      <td align="right">注册码:</td>
      <td align="left"><asp:TextBox class="inputbg" id="CheckNum" runat="server" Width="80px"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="CheckNum"
                                    ErrorMessage="*"></asp:RequiredFieldValidator></td>
      </tr>
      <tr>
      <td align="right"></td>
      <td align="left">
                                <asp:Image ID="VImage" ImageUrl="~/ValidateCode.aspx" runat="server" /></td>
      </tr>
      <tr>
          <td align=right>有效时间:</td>
          <td><UControl:CookieDropDownList id="saveValue" runat=server></UControl:CookieDropDownList></td>
      </tr>
      <tr>
      <td align="center" colspan="2">
        <asp:Button id="btn_ok" runat="server" Text="登录" OnClick="btn_ok_Click"></asp:Button>
      </td>
      </tr>>
    </table>
    </TD>
    <TD class="mr"></TD>
  </TR>
  </TBODY>
</TABLE>
<table cellSpacing="0" cellPadding="0" width="95%" id="Haveloin" visible=false runat=server>
    <tr>
        <td>欢迎回来:</td><td><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td>
    </tr>
      <tr>
        <td>
                IP</td><td><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></td>
    </tr>
    </table>
<TABLE cellSpacing="0" cellPadding="0" width="95%">
  <TBODY>
  <TR>
    <TD class="bl"></TD>
    <TD class="bm">
    </TD>
    <TD class="br"></TD>
  </TR>
  </TBODY>
</TABLE>
</DIV>

cs代码:
protected void Page_Load(object sender, System.EventArgs e)
  {
  // 在此处放置用户代码以初始化页面
            this.config = ConfigFactory.GetConfig();
            userid = Utils.StrToInt(ForumUtils.GetCookie("userid"), -1);
            if (userid != -1)//检测到了用户的cookie,则表示已经登陆
            {
                this.loginTable.Visible = false;
                this.Haveloin.Visible = true;
                //显示用户基本信息
                this.oluserinfo = OnlineUserFactory.UpdateInfo(config.Passwordkey, config.Onlinetimeout);
                userid = oluserinfo.Userid;
                Label1.Text = oluserinfo.Username+"("+oluserinfo.Nickname+")";
                Label2.Text = oluserinfo.Ip.ToString();
            }
            else
            {
                  //
                this.loginTable.Visible = true;
                this.Haveloin.Visible = false;
            }

protected void btn_ok_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                if (Session["VailtCode"] != null)
                {
                    if (String.Compare(Session["VailtCode"].ToString().Trim().ToLower(), CheckNum.Text.Trim().ToLower()) != 0)
                    {
                        MessageBox.Show(Page, "验证码错误,请重新输入!");
                    }
                    else
                    {
                        int uid = UserFactory.CheckPassword(this.userName.Text.Trim(), this.userPWD.Text.Trim(), true);
                        if (uid == -1)
                        {
                            int num2 = LoginLogFactory.UpdateLoginLog(DNTRequest.GetIP(), true);
                            if (num2 > 5)
                            {
                                MessageBox.Show(Page, "您的错误次数已经超过5次,请和管理员联系!");
                            }
                            else
                            {
                                MessageBox.Show(Page, "登陆失败\n用户名或者密码错误!");
                            }
                        }
                        else if (UserFactory.GetShortUserInfo(uid).Groupid == 8)
                        {
                            MessageBox.Show(Page, "您是等待验证会员,请确认验证后再登陆或与管理员联系!"); 
                        }
                      else
                        {
                            ConfigInfo config = ConfigFactory.GetConfig();
                           
                            LoginLogFactory.DeleteLoginLog(DNTRequest.GetIP());
                            UserCreditsFactory.UpdateUserCredits(uid);
                            ForumUtils.WriteUserCookie(uid, Utils.StrToInt(this.saveValue.SelectedItem.Value, 1), config.Passwordkey, 0, -1);
                            OnlineUserInfo oluserinfo1 = OnlineUserFactory.UpdateInfo(config.Passwordkey, config.Onlinetimeout);
                            OnlineUserFactory.UpdateAction(oluserinfo1.Olid, UserAction.Login.ActionID, 0, config.Onlinetimeout);
                            UserFactory.UpdateUserLastvisit(uid, DNTRequest.GetIP());
                            Label1.Text = oluserinfo1.Username + "(" + oluserinfo1.Nickname + ")";
                            Label2.Text = oluserinfo1.Ip.ToString();
                            loginTable.Visible = false;
                            Haveloin.Visible = true;
                        }
                    }
                   
                }
            }


具体的说明我就不说了。大家一看就知道的。这个只是比较简单的范例,这里的验证码,和那个DropdownList是我自己写的,你们可以用其他的控件代替。在的网站的页面加上这个用户控件,直接登陆就可以了,登陆成功后进入论坛就会发现论坛那里已经提示你登陆了。
献丑了
不过我的机器是xp Pro &2K pro,不能直接建立网站,只能在IIS中建立虚拟目录,每次安装都安装不上,后来我自己写一小工具将一些信息写如数据库中,配置DNT.config及general.config之后将DNT.config以及Config文件夹放到wwwroot目录下,并将aspx/1/目录下的文件直接拷贝到根目录才可以浏览论坛。不知道是不是论坛不能在Xp pro这样的机器上直接安装?
kyanite - 2007-4-30 10:32:00
收藏,先去试试
lee - 2007-4-30 12:51:00


引用:
不知道是不是论坛不能在Xp pro这样的机器上直接安装?

可以的.我发过一个文章,很简单

http://www.discuzsupport.net/thread-965-1-1.html
Lex - 2007-5-5 22:23:00
ConfigInfo config = ConfigFactory.GetConfig();
                           
                            LoginLogFactory.DeleteLoginLog(DNTRequest.GetIP());
                            UserCreditsFactory.UpdateUserCredits(uid);
                            ForumUtils.WriteUserCookie(uid, Utils.StrToInt(this.saveValue.SelectedItem.Value, 1), config.Passwordkey, 0, -1);
                            OnlineUserInfo oluserinfo1 = OnlineUserFactory.UpdateInfo(config.Passwordkey, config.Onlinetimeout);
                            OnlineUserFactory.UpdateAction(oluserinfo1.Olid, UserAction.Login.ActionID, 0, config.Onlinetimeout);
                            UserFactory.UpdateUserLastvisit(uid, DNTRequest.GetIP());
这里能不能加一下注释。。。
笨小孩儿 - 2007-5-7 10:26:00
留用:D
zerock - 2008-3-4 22:50:00
留名 我遇到这样的问题
买空间网14 - 2008-4-1 17:24:00
谢谢分享哦,辛苦楼主了!~~~
1
查看完整版本: .Net2.0整合登陆