您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
解决Discuz论坛的Discuz.Cache.DNTCache 的AddObject()死循环
易烟2025-07-20Discuz教程已有人查阅
导读在前天,本人刚下了discuzNT的代码,研究了些许时间老是报stackoverflow的error在web.config中发现了这段代码:
在前天,本人刚下了discuzNT的代码,研究了些许时间老是报stackoverflow的error在web.config中发现了这段代码:
不排除是我的反编工具出的错,我的平台是win2003sp2+sqlserver2005EEsp2+vstssp1
<httpModules>
<add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule"/>
</httpModules>
呵呵,就是HttpModule类,好,找到HttpModule.cs,打开在Line48 有这么一句
if (Utils.InArray(Utils.GetCookie("dnttemplateid"), TemplateFactory.GetValidTemplateIDList()))
在执行TemplateFactory.GetValidTemplateIDList()的时候老实报错,就找到在打开发现在执行
cacheService.AddObject("/Forum/TemplateIDList", str);的时候还是报错
接着进去,这是他的具体的方法体
public virtual void AddObject(string xpath, string str)
{
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, str);
}
}
在情况对的时候,首先会进去
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
这时候调用的是
public virtual void AddObject(string xpath, object o)
这个方法,这个方法是没问题的,就是将一些数据插入Cache里面调用完成之后就执行的是
this.AddObject(xpath, str);(public virtual void AddObject(string xpath, string str)
)
大家注意,调用的是自身,是递归好,前面的if-else在执行一遍,回到this.AddObject(xpath, str);还是递归我就他的意思应该是首先插入路径,然后插入实际数据,两次缓存数据,但是实际代码就是这样子为了证明我的想法,我把代码加成这个样子
int i=0;
public virtual void AddObject(string xpath, string str)
{
i++;//计数功能
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, str);
}
}
再次运行,再次报错,一看i达到了2049,Cache给插入了2000多次,怪不得会overflow考虑了一下,改代码如下:
public virtual void AddObject(string xpath, string str)
{
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, (object)str);
}
}
在第二次的时候box一下,就直接进入public virtual void AddObject(string xpath, string str)里了这个DNTCache里好多这样的AddObject方法,都是这样的错误至此,运行暂时没问题了不知道大家遇到了这种情况没?不排除是我的反编工具出的错,我的平台是win2003sp2+sqlserver2005EEsp2+vstssp1
本文标签:
很赞哦! ()
图文教程
discuz插件开发入门教程
作为一个新手,目前也是刚刚玩转discuz的插件功能,好东西不敢独享,就拿出来大家一起分享入门的过程。现在网上很多关于discuz的插件教程都是很简单的教程,原因可能是这个东西是商业化的东西
freebsd+apache+mysql+php+phpmyadmin+zend+discuz傻瓜式教程
刚接触linux是今年4月的事情,装过不少linux发行版本,最终还是选择了unix中的freebsd,喜欢它的简洁。不过我也是初学者,将这10多天学freebsd的经验总结给大家分享
Discuz百度jiathis代码分享
templates/default/viewthread_node.htm中找到$post[message],这个显示的是贴子内容,在这个div里你可以添加想显示的东西
Discuz!X 3.4任意文件删除漏洞复现过程
今天看下群里在讨论Discuz!X 3.4 任意文件删除漏洞,自己做了一些测试,记录一下过程。结尾附上自己编写的python脚本,自动化实现任意文件删除。
相关源码
-
帝国cms7.5淘宝客电商品牌特价带手机站带会员模板下载为电商品牌特价展示设计的帝国CMS模板,集成PC端与移动端双平台适配。采用瀑布流商品布局,支持品牌分类聚合展示,突出特价促销视觉冲击力。查看源码 -
(PC+WAP)红色驾校培训学车在线预约源码下载基于PbootCMS内核开发的驾校培训专用网站模板,深度适配驾驶培训行业展示需求。采用PC与移动端同步响应设计,单一后台统一管理内容数据,更换图文素材后可快速转变为其他行业网站。查看源码 -
(PC+WAP)绿色产品环保设备垃圾桶厂家公司网站pbootcms模板为垃圾桶生产商、环保设备企业打造的高端响应式门户模板,基于PbootCMS开源内核深度开发。采用HTML5自适应架构,无缝实现PC与手机端数据实时同步与交互优化查看源码 -
pbootcms响应式蓝色旅游旅行社pbootcms网站源码下载为旅游公司、旅行社定制的响应式网站模板,聚焦旅游线路展示、景点推荐及预约服务场景。采用PbootCMS内核开发,自适应技术确保PC与手机端数据实时同步查看源码 -
(自适应响应式)黑色LED显示屏户外广告屏网站源码下载这是一款基于PbootCMS内核开发的响应式网站模板,专门为LED显示屏及户外广告行业打造。模板适配各类显示设备,帮助企业快速搭建专业官网,展示产品与服务优势,有效提升品牌形象。查看源码 -
(自适应)调节阀门气动球阀控制阀网站模板源码下载为调节阀门、气动球阀等工业设备企业打造的响应式网站模板,基于PbootCMS系统开发。突出产品参数展示与技术文档管理功能,通过专业化的布局设计有效呈现工业设备特性,适配各类终端访问需求。查看源码
| 分享笔记 (共有 篇笔记) |
