Discuz!NT3.6与网站整合(用户登陆与注销)解决方案

因为网站要加个论坛,所以就用到了Discuz!NT3.6。下面是我的一个解决办法。

1.将论坛放在网站的forum文件夹下

2.把Dnt.config移动到根目录下,其中的<Forumpath>/</Forumpath>改为<Forumpath>~/forum/</Forumpath>

3.将下面添加进根目录的web.config<httpModules>      <add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule" />      </httpModules><system.webServer>       <modules>            <!--  注意:此节设置由Discuz!NT接管http请求。不会干涉对非Discuz!NT论坛路径下的请求。-->            <add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule" />        </modules></system.webServer>

4.代码

using System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Discuz.Common;using Discuz.Data;using Discuz.Config;using Discuz.Entity;using Discuz.Common.Generic;using Discuz.Forum;namespace Discuz.Toolkit.WebSample{    public partial class login : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            string str = "";            if (Request.Cookies["dnt"] != null)            {                HttpCookie dnt = Request.Cookies["dnt"];                str = "domain:" + dnt.Domain;                str += "过期时间" + dnt.Expires.ToString();                str += "是否有子键" + dnt.HasKeys.ToString();                str += "是否可以通过客户端脚本访问" + dnt.HttpOnly.ToString();                str += "名称:" + dnt.Name;                str += "虚拟路径" + dnt.Path;                str += "是否使用安全套接字层" + dnt.Secure.ToString();                str += "cookie值" + dnt.Value;                for (int i = 0; i < dnt.Values.Count; i++)                {                    str += "---------------"+dnt.Values[i];                }                           }            Response.Write(str);                   }        private void userlogin()        {            int uid = 1;  //这里的uid是我自己测试用的,uid可以从cookie中取得,也可以从数据库中取得            Discuz.Config.GeneralConfigInfo config = Discuz.Config.GeneralConfigs.GetConfig();            OnlineUserInfo onlineUserinfo = Discuz.Forum.OnlineUsers.UpdateInfo(config.Passwordkey, config.Onlinetimeout);            Discuz.Forum.UserCredits.UpdateUserCredits(uid);            ForumUtils.WriteUserCookie(uid, Utils.StrToInt(DNTRequest.GetString("expires"), -1), config.Passwordkey, DNTRequest.GetInt("templateid", 0), DNTRequest.GetInt("loginmode", -1));            Discuz.Forum.OnlineUsers.UpdateAction(onlineUserinfo.Olid, UserAction.Login.ActionID, 0, config.Onlinetimeout);            Discuz.Data.Users.UpdateUserLastvisit(uid, DNTRequest.GetIP());        }        private void loginout()        {            try            {                Discuz.Config.GeneralConfigInfo config = Discuz.Config.GeneralConfigs.GetConfig();                OnlineUserInfo onlineUserinfo = Discuz.Forum.OnlineUsers.UpdateInfo(config.Passwordkey, config.Onlinetimeout);                int userid = Utils.StrToInt(ForumUtils.GetCookie("userid"), -1);                Discuz.Forum .OnlineUsers.UpdateOnlineTime(-999999, userid);                Discuz.Data.OnlineUsers.DeleteRows(onlineUserinfo.Olid);                ForumUtils.ClearUserCookie();                Utils.WriteCookie("dnttemplateid", "", -999999);            }            catch            {            }        }        protected void Button1_Click(object sender, EventArgs e)        {            userlogin();        }        protected void Button2_Click(object sender, EventArgs e)        {            loginout();        }    }}

可以用上面代码进行测试,执行登陆后,再转到论坛,就发现论坛已经登陆了,执行退出登陆,论坛也将会退出登陆。

另外在发布到IIS后,记得设置下用户访问权限,不然会有错误。

当你能爱的时候就不要放弃爱

Discuz!NT3.6与网站整合(用户登陆与注销)解决方案

相关文章:

你感兴趣的文章:

标签云: