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




  • 相关阅读:
    同样的请求img代码,单个html文件和项目中的html文件请求结果不一样
    CSS中A标签断字不换行问题(基础知识)
    句柄无效。 (异常来自 HRESULT:0x80070006 (E_HANDLE))
    Ext.Net 控件FileUploadField上传文件
    500内部服务器错误。你查找的资源存在问题,因而无法显示
    WebService 错误:无法加载协定为xxx的终结点配置部分,因为找到了该协定的多个终结点配置
    SyntaxError: unterminated string literal
    servlet入门
    myeclipse视图布局恢复
    JavaWEB开发入门
  • 原文地址:https://www.cnblogs.com/whosedream/p/2301923.html
Copyright © 2020-2023  润新知