解决ecshop登陆自动退出的莫名现象

  最近在做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这一步的判断也就失效了。这也进一步降低了网站的安全性,这中间怎么取舍也就见仁见智了。

时间: 2024-07-29 21:13:27

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

linux 解决后台进程会自动退出的问题

问题: 之前执行mv命令的时候,经常会自动退出,两边都有空间,而且也没有移动完成,这是因为在后台执行的时候,其实是把他放到了队列里边执行,当父进程死掉的时候,默认会给子进程一个信号,子进程就会自动杀死.后来采用了如下三种办法解决了这个问题 方法一: [[email protected] ~]# nohup mv adduser.py .. nohup: 忽略输入并把输出追加到"nohup.out" [[email protected] ~]# cat nohup.out       /

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

ecshop后台登录后,有时候会自动退出,而且还会很频繁,有的是后台操作两下就莫名退出了,有的是恰好三分钟左右登出.这让管理员很恼火,严重影响了后台使用.对于这一问题,网络上可给的解决方法各有不同.千篇一律的复制.首先这篇文章,总结囊括了网上已有的大部分解决方案:其次,也加入了博主自带的解决方法,供各位ecshop技术参考使用,总有一个适合你的网站. 方法一:网络IP常自动切换的情况修改lib_base.php文件real_ip()函数,在real_ip函数中添加绿色部分代码: function

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

解决Ecshop因为动态ip问题登录后台自动退出 PHP  铁匠  2年前 (2013-07-21)  1130℃  0评论 修改lib_base.php文件real_ip()函数,添加以下代码即可解决:function real_ip(){    static $realip = NULL; if ($realip !== NULL)    {        return $realip;    }  if(isset($_COOKIE[‘real_ipd’]) && !empty($_

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

DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. 2:信息栏增加红色部分: 黑色的信息太多,有时候错误信息被淹陌,分拆出来单独红色块标识错误信息,清晰一些. 3:增加保存所有的配置及配置还原: 之前只保存数据库链接的配置,为了第4点,包起了所有的配置,包括表名等. 4:增加自启动参数,用于定时功能的开机启动: 自启动参数为 - true 或 - 1

ecshop自动退出

在使用ecshop后台的时候,老是自动退出,影响正常使用. 解决办法: 在includes/cls_session.php中,function gen_session_key($session_id)方法里, 删除掉    if ($ip == '') { $ip = substr($this->_ip, 0, strrpos($this->_ip, '.')); }

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

[摘要]在windows下搭建nginx+php环境时,php-cgi.exe会经常性的自动关闭退出,本文介绍通过使用xxfpm进程管理器管理php-cgi.exe. php-cgi.exe在windows+nginx平台下经常自动退出,网上搜到的大部分解决方法都是类似上面的批处理(代码如下)文件临时解决一下,但如果用户在网站登录的话,用户就会突然挂掉. @echo off :main set jinchengshuliang=0 set jinchengshuliangxiaxian=2 fo

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

一部分用户反映登录后自动退出,经过跟踪观察,发现这些用户都是动态IP,而ecmall 中的 session 刚好是与 ip 有关的,故而找不到用户回话二失败,需重新登录. 怎么处理呢? 修改 includes/libraries/session.lib.php 方法,简单粗暴,去掉 ip 判断即可,哇卡卡 /** * 生成session验证串 * * @author wj * @param string $session_id * @return stirng */ function gen_s

SharePoint 解决打开浏览器自动登录

SharePoint使用Windows身份验证,默认会弹出Windows验证登录框,如下图所示: 1.对于已经加域的客户端 IE安全设置,将站点加信任站点,然后修改信任站点安全设置, 滚动条拉到最后,在"用户身份验证"项中,选择"自动使用当前用户名和密码登陆". 点击"确定",关闭浏览器,重新打开,就可以自动登录系统了. 2.对于没有加域的客户端 这个是用户经常反馈的一个问题,客户端没有加域,勾选了"记住我的凭据",下次仍旧会

docker run java官方镜像默认自动退出的问题解决办法

这几天准备在配置新版本的测试环境,因为之前的也是用docker跑tomcat,但是现在新办法直接砍掉一部分tomcat,直接用java来跑依赖包.这对我们运维来说就蛋疼了,确实是没有用docker直接跑jar包的经验,网上搜了一堆零零碎碎的资料,最后到底还是跑起来了,具体实现还需要完善,今天先写一些下来记录一下,以免再碰到此类问题. 交代一下具体背景情况: 1.jar包在普通环境上的运行脚本已经写好,jar包也已经做好,统一归档到一个目录下面几个分支目录. 2.用的是官方java的alpine-