在使用Infor ERP LN的过程中,由于网络中断或者不稳定经常会出现用户打开某个Session的时候报错,信息类似如下:
Fatal error : value DsNheight=-280 out of range

那么这时候,用户怎么也打不开想要使用的Session了,这时候就需要用到这个有用的Session:Remove User Defaults.

输入用户的账号,选择相应的公司,然后输入对应的Session Code,点击Remove即可。
在使用Infor ERP LN的过程中,由于网络中断或者不稳定经常会出现用户打开某个Session的时候报错,信息类似如下:
Fatal error : value DsNheight=-280 out of range
那么这时候,用户怎么也打不开想要使用的Session了,这时候就需要用到这个有用的Session:Remove User Defaults.
输入用户的账号,选择相应的公司,然后输入对应的Session Code,点击Remove即可。
我这个站的WordPress位于主域名下的/shanghai/下面,原来国外主机用的Apache,现在这个是Nginx主机,所以伪静态的规则要重新改下。
宝塔可以很方便生成WordPress的顶级目录下的伪静态代码,但对于二级目录就的自己写了。
代码如下,把其中的/shanghai/改为你的目录即可。
location /
{
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location /shanghai/ {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /shanghai/index.php;
}
}
如果你部署在国内,你就知道升级的时候会不断地遇到升级失败,然后整站就不能访问了。
原因及重要性不必多说,那就说说关闭的方法吧:配置wp-config.php文件
全局配置文件wp-config.php位于wordpress程序根目录下的,在文件最后加入如下代码:
/** 关闭WordPress自动更新升级 */
define('AUTOMATIC_UPDATER_DISABLED', true);
11月17日,Tony微信告诉我博客不能访问了,我一看被植入了js木马。
回想了一下11月4日还写博客来的,当时没有什么问题的。
赶紧问服务商有没有备份,最近的备份是哪天的?得到的答复是只保留最近3天的备份,找到最早的是11月14日的,可惜那时候已经被黑了。数据库和程序都被动了。
看了一下本地的备份,最近的是3月份的,也就是说半年多的博客要丢了。
头大,但工作挺忙,也顾不上了。
第一个念头就是,搬回阿里云,只要有付费的每日备份。
碰到青云有个双十一的活动,就随手买了个Linux的上海主机。正好也需要备案,就没急着捣鼓。等到了周末暂时利用新主机上的MySQL数据,看了一下被植木马的数据库,发现规律就是每篇文章都在结尾加入了一串javascript代码,同时站点的home和site的配置项都被改为木马的网址。
于是心里一喜,果断的写了REPLACE替换,清除了木马。
此时有了信心,拿起我的BeyondCompare文件比较利器,对WordPress程序与原版程序作了对比,发现不少上传的php文件,还有无后缀的木马文件。同时发现了被修改的程序文件,就这样逐渐的把程序的木马也清理了。
此时备案还在进行中,就在原来的国外主机上进行了程序和数据库的覆盖,当然了本地也保存了备份。
果然,网站正常了。欣喜的告诉小伙伴们,大家非常期待我分享如何清除木马的。
我还是比较谦虚的,希望等几天看看,是否还有未清理的木马,不然分享就是给自己丢人。
果不其然,替换后的第二天,程序又被植入了木马。
干净对虚拟机下的其他站点目录都进行了清理,还删除了几个漏网之鱼。
这下基本上放心了,此时备案也快完成了。
于是在新主机上玩BT宝塔,对服务器安全、网站目录、端口放行、SSL证书、WordPress二级目录下的伪静态等全部研究了一遍。
昨天,改了DNS,指向到了新主机。
老主机的数据全部删除了,希望在新主机上,在宝塔的协助下,能够安全不被黑。
这篇作为流水账,下次分享详细的木马清理过程,还有WordPress文件目录安全设置和伪静态的相关内容。
以前写的基于MSSQL数据库的.NET程序,不用担心SQL语句中的;或者换行符。但是因为要基于Infor LN的Oracle数据库进行开发,就碰到了;分号和换行的报错,同时一次执行UPDATE的多条更新语句时,也会报错。
Oracle.ManagedDataAccess.Client.OracleException:ORA-00911: invalid character
单行SQL如果有换行时,加了;就报上面的错,多行执行的时候,会报下面这种错误
Oracle.ManagedDataAccess.Client.OracleException:ORA-06550: line 1, column 1:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
; <an identifier> <a double-quoted delimited-identifier>
The symbol ";" was substituted for "end-of-file" to continue.
虽然从网上能搜索到ExecuteNonQuery执行Oracle多条SQL的时候需要用到以下结构
BEGIN
SQL1;
SQL2;
SQL3;
END;
但是并没有人提到一定要确保整个SQL是一行,必须没有换行!
BEGIN
UPDATE BAANDB.TWHINH225301 A
SET A.T$WVID = -999
,A.T$ASGN = 1
,A.T$PKID = 'Troy'
,A.T$STLO = 'EMS'
WHERE A.T$RUNN = 'CN432789'
AND A.T$PICM = 1
AND A.T$ASGN = 2
AND A.T$PCKD = 2;
UPDATE BAANDB.TWHINH225301 A
SET A.T$WVID = -999
,A.T$ASGN = 1
,A.T$PKID = 'Troy'
,A.T$STLO = 'EMS'
WHERE A.T$RUNN = 'CN432785'
AND A.T$PICM = 6
AND A.T$ASGN = 2
AND A.T$PCKD = 2;
END;
因为写日志看SQL方便,用了AppendLine,那么下面的代码中,需要手动替换下换行符:Replace(Environment.NewLine, ” “),如果还不放心,可以用Replace(“r\n”, ” “).Replace(‘\n’, ‘ ‘).Replace(‘\r’, ‘ ‘) 批量将各种换行符替换为空格。
var result = 1;
var sb = new StringBuilder();
sb.AppendLine("BEGIN");
foreach (var entity in list)
{
sb.AppendLine("UPDATE BAANDB.TWHINH225" + companyId + " A");
sb.AppendLine("SET A.T$WVID = -999");
sb.AppendLine(",A.T$ASGN = 1");
if (!string.IsNullOrEmpty(entity.Picker))
{
entity.Picker = dbHelper.SqlSafe(entity.Picker);
sb.AppendLine(",A.T$PKID = '" + entity.Picker + "'");
}
if (!string.IsNullOrEmpty(entity.StagingLocation))
{
entity.StagingLocation = dbHelper.SqlSafe(entity.StagingLocation);
sb.AppendLine(",A.T$STLO = '" + entity.StagingLocation + "'");
}
// By Line
sb.AppendLine("WHERE A.T$OORG = " + GetOrderOrigin(entity.OrderOrigin));
sb.AppendLine("AND A.T$ORNO = '" + entity.OrderNumber + "'");
sb.AppendLine("AND A.T$OSET = " + entity.OrderSet);
sb.AppendLine("AND A.T$PONO = " + entity.Line);
sb.AppendLine("AND A.T$SEQN = " + entity.SequenceNumber);
sb.AppendLine("AND A.T$SERN = " + entity.Advice);
// Check Assign Status
sb.AppendLine("AND A.T$ASGN = 2");
sb.AppendLine("AND A.T$PCKD = 2;");
}
sb.AppendLine("END;");
try
{
ExecuteNonQuery(sb.ToString().Replace(Environment.NewLine, " "));
}
catch (Exception e)
{
LogUtil.WriteException(e);
result = 0;
}
return result;
因为这个问题,还从大石头的新生命微信群发了红包求助,意外收获了结识了一个挺不错的开发者王振(王Bank)和他写的DbHelper:https://gitee.com/wangbank/BankDbHelper