最近在做ecshop的二次开发,程序发布后测试出现一个莫名的问题。点击几次页面后出现session丢失,需要重复登陆;本地怎么测试也都无法重现问题。一开始以为是修改程序的问题,可是怎么找都找不着问题所在。网上搜索了一下,说是ip发生了变化引起的。于是做了如下测试:

  1、www.ip.cn查询并记录下IP

  2、登陆

  3、随机点击网页,直到要求重新登陆

  4、www.ip.cn重新查下IP

  果然前后两个IP不一样。因而很有可能是由于IP发生变化导致session失效,于是查看了下ecshop的session机制。其中获取session key的函数是这样

  includes/cls_session.php(移动端的也类似:mobile/include/cls_session.php)

function gen_session_key($session_id)
{
  static $ip = '';   if ($ip == '')
  {
    $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
  }   return sprintf('%08x', crc32(ROOT_PATH . $ip . $session_id));
}

  当IP发生变化时:substr($this->_ip, 0, strrpos($this->_ip, '.'))获取到的IP段,只要不在同一个IP段内便无法获得相同的session key;进而也就无法获得session的具体信息,也就导致重复登陆。这也是为什么本地无法重现问题的原因。好吧,问题找到了。那么怎么解决呢?最简单的办法就是将获取IP段的部分去掉,于是修改后的函数也就成这样了。

function gen_session_key($session_id)
{
static $ip = '';   /*
if ($ip == '')
{
$ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
}
   */ return sprintf('%08x', crc32(ROOT_PATH . $ip . $session_id));
}

  这样便可解决重复登陆的问题。但这又涉及到程序的安全性问题,一旦session泄露IP这一步的判断也就失效了。这也进一步降低了网站的安全性,这中间怎么取舍也就见仁见智了。

解决ecshop登陆自动退出的莫名现象的更多相关文章

  1. cookie丢失、登陆自动退出问题解决

    cookie保存在客户端或者内存中,不易丢失.但是在某些情况下会被忽略.在项目过程中遇到过跨域丢失的情况.在VS里面运行的程序,产生的cookie默认是没有domain值的,但是给它设定domain值 ...

  2. ecshop后台登录频繁自动退出问题终极解决方法集锦

    ecshop后台登录后,有时候会自动退出,而且还会很频繁,有的是后台操作两下就莫名退出了,有的是恰好三分钟左右登出.这让管理员很恼火,严重影响了后台使用.对于这一问题,网络上可给的解决方法各有不同.千 ...

  3. 解决Ecshop因为动态ip问题登录后台自动退出

    解决Ecshop因为动态ip问题登录后台自动退出 PHP  铁匠  2年前 (2013-07-21)  1130℃  0评论 修改lib_base.php文件real_ip()函数,添加以下代码即可解 ...

  4. DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

    DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...

  5. ecshop自动退出

    在使用ecshop后台的时候,老是自动退出,影响正常使用. 解决办法: 在includes/cls_session.php中,function gen_session_key($session_id) ...

  6. paip. 解决java程序不能自动退出

    paip. 解决java程序不能自动退出 原因:有东西在运行,所以,不能自动退出.. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址: ...

  7. 完美解决windows+ngnix+phpcgi自动退出的问题

    [摘要]在windows下搭建nginx+php环境时,php-cgi.exe会经常性的自动关闭退出,本文介绍通过使用xxfpm进程管理器管理php-cgi.exe. php-cgi.exe在wind ...

  8. ecmall用户登录后自动退出解决方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 解决Flash CS6初始化字体就自动退出

    系统win7 问题始于安装了同事的字体,启动Flash CS6时界面上显示开始初始化字体...然后 就自动退出了 尝试过进入pe系统删除字体,可是删除不了 网上搜索找到了这一个删除字体的工具FontF ...

随机推荐

  1. Java-日期转换

    如下: package 时间日期类; import java.text.SimpleDateFormat; import java.util.Date; public class 日期格式转换 { / ...

  2. Java基础-关键字-final

    在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量).下面就从这三个方面来了解一下final关键字的基本用法. 1.修饰类 当用final修饰一个类时,表明这个类不能被继 ...

  3. 10 个免费的 jQuery 可视化编辑器插件

    富文本编辑器,也就是所见即所得的 HTML 编辑器,是网站一个非常重要的组件,特别是对于一些内容发布网站来说.本文介绍 10 个基于 jQuery 的可视化文本编辑器. MarkitUp markIt ...

  4. 【POJ 2923】Relocation(状压DP+DP)

    题意是给你n个物品,每次两辆车运,容量分别是c1,c2,求最少运送次数.好像不是很好想,我看了网上的题解才做出来.先用状压DP计算i状态下,第一辆可以运送的重量,用该状态的重量总和-第一辆可以运送的, ...

  5. 【kAri OJ】wzt的树

    时间限制 1000 ms 内存限制 65536 KB 题目描述 改革春风吹满地,中国人民真争气!家庭联产承包责任制以后,全国人民争想发家致富.wzt于是包了一个山头来种植金丝楠木,花了好几年种了N棵树 ...

  6. Java中的继承、封装、多态、抽象

    1.继承 java 和某些面向对象语言(如 c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承.即java 中一个类只能继承于另一个类.我们将被继承的类称之为父类(基类),继承类称之 ...

  7. 9.Android之日期对话框DatePicker控件学习

    设置日期对话框在手机经常用到,今天来学习下. 首先设置好布局文件:如图 xml对应代码 <?xml version="1.0" encoding="utf-8&qu ...

  8. NSThread - (void)start vs java Thread implements Runnable

    This method spawns the new thread and invokes the receiver’s main method on the new thread. If you i ...

  9. MyEclipse------从MySQL取出图片

    showImage.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  10. 锋利的jQuery-3--css("height")和.height()的区别

    $("p").css("height") : 获取的高度值与样式的设置有关,可能会得到“auto”, 也可能是字符串“10px”之类的.设置值时如果是数值形式默 ...