最近在做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. 【bzoj2460】 BeiJing2011—元素

    www.lydsy.com/JudgeOnline/problem.php?id=2460 (题目链接) 题意 n个二元组(a,b),求一个∑b最大,且所有子集XOR<>0的集合 Solu ...

  2. php中静态变量和静态方法

    1,静态变量:所有对象共享的变量成为静态变量.静态变量类似于全局变量,不过全局变量破坏对象的封装性,因此其对应于面向过程:静态变量对应于面向对象. 2,全局变量,全局变量的使用实例如下,声明全局变量时 ...

  3. 轻量级应用开发之(04)UIScrollView-1

    本文是我在学习OC中的一些经验总结,在学习中总结了常用的Mac技巧,欢迎群友对本文提出意见,如有问题请联系我. 一 什么是UIScrollView 1)移动设备的屏幕大小是极其有限的,因此直接展示在用 ...

  4. Android实战_来电拦截专家

    1 项目演示: 2 代码演示: 1)MainActivity类代码: MainActivity类代码: package com.example.phoneinteceptor_one;import j ...

  5. java变量作用域

      1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可 ...

  6. Initialization of deep networks

    Initialization of deep networks 24 Feb 2015Gustav Larsson As we all know, the solution to a non-conv ...

  7. 解决:[INS-20802] Oracle Net Configuration Assistant failed

    在linux 中安装Oracle 11G 的时辰呈现 [INS-20802] Oracle Net Configuration Assistant failed 是oracle数据库的鼓掌,须要补丁p ...

  8. TCP和UDP的保护消息边界机制

    在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.TCP的socket编程,收发两端都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化 ...

  9. android- FileProvider崩溃 - NPE试图调用一个空字符串XmlResourceParser(FileProvider crash - npe attempting to invoke XmlResourceParser on a null String)

    问题: This is a part of my manifest: <?xml version="1.0" encoding="utf-8"?> ...

  10. JS 循环遍历JSON数据

    JSON数据如:{"options":"[{/"text/":/"王家湾/",/"value/":/" ...