ECSHOP搬家恢复数据提示ecs_sessions不存在的解决方法
- 格式:doc
- 大小:27.00 KB
- 文档页数:2
Ecshop缓存常见问题
ECSHOP开发中心()
在近期客户反映网站的缓存问题很严重,客户网站的商品数量达到了5000多个,缓存带来的垃圾文件大约要占600M左右甚至更多。
下面我们要了解缓存文件是我们网站根目录下的哪个文件,根目录下temp为存放缓存文件。
下面就说说遇到的问题
客户网站首页提示
1、/temp/caches/f/index_40F756F0.php
in D:\wwwroot\ECShop\includes\cls_template.php on line 200
2、Warning: file_put_contents includes\cls_template.php on line 198
这就是缓存文件造成出现问题有几种
引起此问题的原因:
1.数据库已经满了
2.相应目录(temp)具有可读写的权限。
解决方法:
1.增大服务器空间。
2.清理缓存目录、清空ecs_states表(delete from ecs_states;),目的都是为了增大可用空间。
3.还有些用户经常备份数据库,这样会造成data目录下的文件占用空间。
建议用户备份数据库后将备份文件保存到本地,然后将服务器上的备份文件清除。
4.赋予相应的目录(temp)为可读写的权限。
【ECSHOP开发中心】。
修复Ecshop密码找回功能漏洞详解秦皇岛商之翼旗下ECSHOP开发中心()Ecshop提供了密码找回功能,但是整个密码找回流程中存在一些设计上的安全隐患, Ecshop程序使用了MD5不可逆加密算法,但是计算密文的生成元素都有可以很轻易地被黑客拿到/* if (md5($adminid . $password) <> $code) 1. $adminid: 黑客显式指定2. $password: 暴力枚举*/2. 对重复失败次数没有做限制1. 漏洞触发条件HTTP Package Repeater2 漏洞影响范围1. ecshop2.7.22. ecshop 2.7.33. 漏洞代码分析admin/get_password.php/* 验证新密码,更新管理员密码*/elseif (!empty($_POST['action']) && $_POST['action'] == 'reset_pwd'){$new_password = isset($_POST['password']) ? trim($_POST['password']) : ''; $adminid = isset($_POST['adminid']) ? intval($_POST['adminid']) : 0; $code = isset($_POST['code']) ? trim($_POST['code']) : '';if (empty($new_password) || empty($code) || $adminid == 0){ecs_header("Location: privilege.php?act=login\n");exit;}/* 以用户的原密码,与code的值匹配*/$sql = 'SELECT password FROM ' .$ecs->table('admin_user'). " WHERE user_id = '$adminid'";$password = $db->getOne($sql);/*这里是漏洞的关键1. $adminid:黑客想要爆破攻击重置密码的对象2. $password:黑客通过密码暴力枚举3. $code:黑客可以在本地使用相同的算法进行计算得到*/if (md5($adminid . $password) <> $code){//此链接不合法$link[0]['text'] = $_LANG['back'];$link[0]['href'] = 'privilege.php?act=login';sys_msg($_LANG['code_param_error'], 0, $link);}4. 防御方法这个漏洞属于密码学的抗穷举设计缺陷,要对这个漏洞进行修复,同时要能保证对原有的业务进行平滑兼容,我们可以从以下几个方面去思考1. 增加密钥空间,提供攻击者的攻击成本:容易实现2. 改变加密算法,间接地提高了密钥空间:需要对原有旧的密码进行全量地升级,改造成本大admin/get_password.php/* 以用户的原密码,与code的值匹配*/$sql = 'SELECT password FROM ' .$ecs->table('admin_user'). " WHERE user_id = '$adminid'";$password = $db->getOne($sql);if (md5($adminid . $password) <> $code){//此链接不合法$link[0]['text'] = $_LANG['back'];$link[0]['href'] = 'privilege.php?act=login';sys_msg($_LANG['code_param_error'], 0, $link);}//更新管理员的密码/*这里是pathc code的关键代码中增加了随机数的盐,这极大地增加了黑客爆破的密钥空间,提供了攻击成本*/$ec_salt=rand(1,9999);$sql = "UPDATE " .$ecs->table('admin_user'). "SET password ='".md5(md5($new_password).$ec_salt)."',`ec_salt`='$ec_salt' "."WHERE user_id = '$adminid'";【ECSHOP开发中心】。
iframe session 丢失解决的方法iframe中的session丢失是一个常见的问题,尤其在跨域使用iframe时。
下面是一些解决该问题的方法:1. 使用cookieless="true":在中,将sessionState元素的cookieless属性设置为"true"。
这样,将不会使用cookie来存储session ID,而是将session ID存储在URL中。
2. 使用代替Session:当在iframe中访问session时,可以使用代替Session来获取session对象。
例如,将代码`Session["Username"]`改为`["Username"]`。
3. 配置CORS:如果iframe和主页面来自不同的域,需要配置CORS(跨源资源共享)来允许跨域请求。
在中,可以通过设置响应头来实现CORS。
例如,添加以下代码到:```xml<httpProtocol><customHeaders><add name="Access-Control-Allow-Origin" value="" /><add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" /><add name="Access-Control-Allow-Headers" value="Content-Type" /></customHeaders></httpProtocol>```4. 禁用浏览器安全机制:某些浏览器安全机制可能会阻止跨域请求,导致iframe中的session丢失。
网站Session 丢失,会话过期,Cookie 过期的原因及解决方案 2010/7/12 网站 Session 丢失,会话过期,Cookie 过期 的原因及解决方案有朋友问: 我开发的 站点在本地运行时 很正常,可是发布到了生产环境之后,不能正常运行,经常出错,检查原因时发现是因为 Session 和Cookie 经常无缘无故丢失。
从表面上看这是个比较奇怪的问题,难道生产环境和本地环境有什么不同吗?答案是: 确实有点不一样。
中的 cookie 和 session 都是要加密的,而加密时要用到MachineKey , 如果你的 的web.config 中没有加上 MachineKey ,当然你发布到生产环境之后就会遇到上面的问题,加上 MachineKey 配置项就不会出错了。
MachineKey 的配置如下:<system.web> <machineKeyvalidationKey="A40C4D37C52C1ACCC5C7B9224274DDB3E5C4D1618B4509C7"decryptionKey="6053A3FE59AC5E83163D09D6E36CFC8FFEBE81E67EE55122" validation="SHA1" /></system.web>12 3 在 这样的Web 应用中,Session 是用来保存用户状态的常用手段,不过由于服务器内存空间是有限的,所以Session 过期时间设置是很有必要的。
在 中如何设置Session 的过期时间呢,很简单,修改web.config 配4 5 6 7 置。
具体修改方法如下,在web.config 中进行如下配置 <system.web><sessionState mode="InProc" timeout="30"/></system.web>在这里指的是Session 过期时间为30分钟。
Session失效的原因汇总及解决丢失办法昨天去GTSC⾯试,有⾯试官问我关于Session丢失之后怎么查的问题,说⽼实话,开发到现在很少碰到这样的情况,唯⼀想到的就是Session超时,还有就是做Session读写⽇志,发觉⾯试官听了之后不是很满意,汗!不管怎么说,是个学习的好机会,今天抽空查了⼀下⽹上关于这些问题的处理⽅法,总结⼀下,希望对⼤家有所帮助。
顺便提⼀下asp中Session的⼯作原理:asp的Session是具有进程依赖性的。
ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。
所以当inetinfo.exe进程崩溃时,这些信息也就丢失。
另外,重起或者关闭IIS服务都会造成信息的丢失。
Session的实现的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进⾏状态控制,由于Session本⾝就是⽤来做状态维护的,因此⽤HttpModule做Session是再合适不过了。
原因1:bin⽬录中的⽂件被改写,有⼀种机制,为了保证dll重新编译之后,系统正常运⾏,它会重新启动⼀次⽹站进程,这时就会导致Session丢失,所以如果有access数据库位于bin⽬录,或者有其他⽂件被系统改写,就会导致Session丢失原因2:⽂件夹选项中,如果没有打开“在单独的进程中打开⽂件夹窗⼝”,⼀旦新建⼀个窗⼝,系统可能认为是新的Session会话,⽽⽆法访问原来的Session,所以需要打开该选项,否则会导致Session丢失参考配置:原因3:似乎⼤部分的Session丢失是客户端引起的,所以要从客户端下⼿,看看cookie有没有打开原因4:Session的时间设置是不是有问题,会不会因为超时造成丢失原因5:IE中的cookie数量限制(每个域20个cookie)可能导致session丢失原因6:使⽤web garden模式,且使⽤了InProc mode作为保存session的⽅式解决丢失的经验1. 判断是不是原因1造成的,可以在每次刷新页⾯的时候,跟踪bin中某个⽂件的修改时间2. 做Session读写⽇志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页⾯、当前函数、函数中的第⼏次Session操作,这样找丢失的原因会⽅便很多3. 如果允许的话,建议使⽤state server或sql server保存session,这样不容易丢失4. 在global.asa中加⼊代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。
session失效的几种方法随着互联网的快速发展,越来越多的应用程序开始采用session来保存用户的状态信息。
然而,session失效是一个常见的问题,它可能会导致用户的信息丢失,给用户带来不好的体验。
本文将介绍session失效的几种方法,并提出一些解决方案。
一、session超时session的超时是指session在一定时间内没有活动就会自动失效。
这个时间可以通过服务器配置文件中的session.timeout参数进行设置。
一旦超过了这个时间,session就会自动失效。
这种情况通常是由于用户长时间不进行操作导致的,比如长时间没有点击或者提交表单等。
解决方法:1. 增加session的超时时间:可以通过修改服务器配置文件来增加session的超时时间,使得用户可以有更长时间来进行操作。
2. 提示用户:当用户的session即将失效时,可以通过弹窗或者提醒条等方式来提醒用户及时操作,从而避免session的失效。
二、服务器重启服务器在进行内存清理、系统维护、升级等操作时会导致session的失效。
这种情况通常是由服务器端的操作导致的,当服务器重启后,session会被清空,用户的状态信息也会丢失。
解决方法:1. 集裙部署:可以采用集裙部署的方式来避免单点故障,当一个服务器重启时,其他服务器可以继续提供服务,从而避免影响用户。
2. 定时备份:可以采用定时备份session的方式,将用户的状态信息保存到数据库中或者文件中,当服务器重启后可以将备份的session 信息还原,从而避免用户的信息丢失。
三、浏览器限制浏览器的限制也会导致session的失效,比如用户关闭浏览器、清除cookie、切换浏览器等操作都会导致session的失效。
这种情况通常是由于用户端的操作导致的,当用户进行了以上操作后,session就会失效。
解决方法:1. 使用cookie:可以将session的标识符保存到cookie中,当用户关闭浏览器后再次打开时,可以通过cookie来重新获取session,从而避免session的失效。
PHP与AJAX之间解决跨域上传文件与session丢失问题1.跨域问题1.1 方法一:使用jsonp(非官方)跨域数据交互协议,但是,这里存在一个局限性,就是不能上传文件(这里不详细说明,下面主要讲解方法二)1.2 方法二:直接使用json数据格式。
1.2.1 简单的允许所有域名对跨域到本站(不安全,不建议),只需在php文件中设置一下header:header('Access-Control-Allow-Origin: *');// *是表示允许所有域名进行跨域1.2.2 只允许指定域名进行跨域,那么,程序就相对复杂一点了,但是比较安全和灵活:$domainAccess = array(//设置语序跨域的域名'','','');$HTTP_REFERER = explode('/', $_SERVER["HTTP_REFERER"]);//获取发起请求的源站url,并分割成数组,$HTTP_REFERER[0]=>’http(s)’,$HTTP_REFERER[1]=>’’,$HTTP_REFERER[2]=>域名(如),$HTTP_REFERER[3…]=>uriif(in_array($HTTP_REFERER[2], $domainAccess)){//匹配域名$serverHost = $HTTP_REFERER[0].'//'.$HTTP_REFERER[2];header("Access-Control-Allow-Origin: ".$serverHost);}2.session丢失问题2.1 首先实现session共享要实现session共享,有很多方法,可以使用关系型数据库共享(会增大数据库负载压力);可以使用redis、memcache等非关系型数据库共享(负载能力强,推荐),这些共享操作相对简单,只要在php.ini中找到session部分和php程序中配置好redis链接,php.ini配置如下(redis为例):session.save_handler = redis//类型session.save_path="tcp://:123456?auth=adcbd"//存储或共享路径session.cookie_domain =""//域名(下的所有子域名)2.2 ajax程序中添加如下代码(红色部分):var msg = new FormData($( "#form_chat_image" )[0]);//获取含有文件的form表单数据,form表单必须声明为:enctype="multipart/form-data"$.ajax({type: "post",url: CHAT_SITE_URL+'/index.php?act=web_chat&op=send_pic',xhrFields: {withCredentials: true},crossDomain: true,data: msg,async: true,cache: false,dataType:'json',contentType: false,processData: false,success: function(data) {//成功},error: function(xhr) {//失败}});2.3 php中添加header如下(红色部分):if(in_array($HTTP_REFERER[2], $domainAccess)){//匹配域名$serverHost = $HTTP_REFERER[0].'//'.$HTTP_REFERER[2];header("Access-Control-Allow-Credentials: true");header("Access-Control-Allow-Origin: ".$serverHost);}到这里,ajax跨域上传文件的并防止session丢失的问题就解决啦!。
解决php项目中session失效的方法今天下班坐班车,快到站的时候,上家公司的leader发了个qq 给我,意思是救火,下车后回来在电脑上详细问了下,leader的描述如下[cpp]view plain copyprint.jpg"tracking-ad" data-mod="popu_167">1.这个地址你帮我看下为啥上传完试卷发布任务设置答题卡的时候 session就没了因为这个项目一开始后台都是我一人开发的,因此很快就找到了问题所在。
流程为:用户通过js组件上传试卷,在上传试卷的方法中通过session存储刚刚上传的试卷详细信息,如名称、后缀、存入资源表的ID等,上传成功后,再点击页面上的其他选项,如学校、年级、难易度等,最后点击提交,在提交处理的方法里,一开始便判断刚刚上传的session值是否存在,不存在便跳到试卷首页。
我在此方法中打印了$_SESSION,没有值,奇怪了,以前还是好好的。
于是我问了下,啥时候开始的,leader说下午快下班时,老师打电话说上传试卷设置答题卡不成功,老跳转。
接着又问了下,动服务器环境了么,leader 说没有。
既然出现了问题,那就解决问题呗。
正好这段时间在看《PHP核心技术与最佳实践》一书,里面就对session和cookie有详细的描述,同时也加深了我对二者的理解。
于是我先打开php的配置文件,找到session相关的配置项,发现session.save_path为/data2/session,我记得以前都是设置为/data1/session的,怎么变了。
于是我退出来去看看此路径,一开始我以为是该目录权限不够,后来一看,压根就没有该目录,难怪每个session不会跨页面。
于是新建文件,设置权限,再上传,一切又恢复正常了。
写到这,我也想再唠叨下session相关的技术点。
session是存储在服务器端的,默认是以文件方式存储的(session.save_handler = files)。
思迅常见问题收集1. 专卖V8打开时提示错误:系统未安装ADO!请MDAC_TYP.EXE安装弄个批处理运行下面这些。
regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll" /sregsvr32 "C:\Program Files\Common Files\System\ado\msadomd.dll" /sregsvr32 "C:\Program Files\Common Files\System\ado\msador15.dll" /sregsvr32 "C:\Program Files\Common Files\System\ado\msadox.dll" /sregsvr32 "C:\Program Files\Common Files\System\ado\msadrh15.dll" /sregsvr32 "C:\Program Files\Common Files\System\ado\msjro.dll" /s复制上面的语句到 TXT文本把扩展名 .TXT 改成 .bat 双击重新登录软件即可2.连接不上数据库思迅软件之不能连接数据库(转)个人认为不能连接到数据库应从以下几个方面着手1.在SQL数据库中不存在思迅软件的数据库(这个很容易排除,就不啰嗦了)2.思迅软件数据库置疑等引起的解决方法可以参考/?s=%E7%BD%AE%E7%96%913.SQL server其本身的安装或设置有问题,现结合网上查到的资料及个人总结的几个原因及解决方法描述如下,一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.一般说来,有以下几种可能性:1,SQL Server名称或IP地址拼写有误(修改数据库连接方法开始--运行--输入 regedit HKEY_LOCAL_MACHINE\SOFTWARE\siss\ 下找到 ServerName 修改连接的服务器地址)2,服务器端网络配置有误3,客户端网络配置有误首先,检查网络物理连接 ping <服务器IP地址/服务器名称> 如果 ping <服务器IP地址>不成功,说明物理连接有故障,这时候要检查硬件设备,如网卡,HUB(友情提示:HUB接电脑做跳线线序一头是A类,一头是B类),交换机,路由器等;还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,因此在检查连接故障的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.如果ping <服务器IP地址> 成功而,ping <服务器名称> 失败则说明名字解析有故障,这时候要检查 DNS 服务是否正常。
ECSHOP搬家恢复数据提示ecs_sessions不存在的解决方法ECSHOP开发中心()
ECSHOP网店程序在搬迁空间或恢复备份或更换域名后,经常会出现以下错误提示:
MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => Insert INTO `test`.`ecs_sessions` (sesskey, expiry, ip, data) VALUES (’8a3107988bf98cc9a5079fdfbe766120′, ’1278128679′, ’127.0.0.1′, ‘a:0:{}’) ) [2] => Array ( [error] => Table ‘test.ecs_sessions’doesn’t exist ) [3] => Array ( [errno] => 1146 ) ) ,
这是因为你当初通过ECSHOP后台备份时,少了两个表,一个是ecs_sessions ,一个是ecs_sessions_data。
既然是少了两张表,那么我们想法给他重新建立就OK了呗。
下面讲下方法:
分别将下面两段SQL语句复制粘贴到“ECSHOP后台》数据库管理》SQL查询”的输入框里提交即可。
CREATE TABLE IF NOT EXISTS `ecs_sessions` (
`sesskey` char(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`expiry` int(10) unsigned NOT NULL DEFAULT '0',
`userid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`adminid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`ip` char(15) NOT NULL DEFAULT '',
`user_name` varchar(60) NOT NULL,
`user_rank` tinyint(3) NOT NULL,
`discount` decimal(3,2) NOT NULL,
`email` varchar(60) NOT NULL,
`data` char(255) NOT NULL DEFAULT '',
PRIMARY KEY (`sesskey`),
KEY `expiry` (`expiry`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `ecs_sessions_data` (
`sesskey` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `expiry` int(10) unsigned NOT NULL DEFAULT '0',
`data` longtext NOT NULL,
PRIMARY KEY (`sesskey`),
KEY `expiry` (`expiry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
注意:
1)此例使用的是默认表前缀ecs_ ,如果你的表前缀不是ecs_ 请自行修改后再提交
2)此例使用的是UTF8字符集如果你使用的是GBK字符集也请自行修改后,再提交。
【ECSHOP开发中心】。