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后,记得设置下用户访问权限,不然会有错误。