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






本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4677876.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
弹性计算 安全 机器人
定时提醒再也不用担心忘记啦
好记性不如烂笔头,烂笔头不如靠谱的自动化~~~正在寻找自动化流程编排工具或定时任务工具的朋友们赶紧看过来,为你介绍一款简单配置即可实现自动化定时提醒的平台阿里云计算巢AppFLow。
240 0
|
Python
一个12306自动抢票的脚本
一个12306自动抢票的脚本
675 1
WordPress前台后台出现一片空白的原因以及解决办法
WordPress前台后台出现空白的可能原因有以下:   这个问题,一般是在进行以下操作后出现的:   1.网站更换新主题2.网站安装或升级插件3.升级了Wordpress版本   其实问题的根源在于你的主题、插件和wordpress自身三者之间的不兼容,有的主题集成了很多强大的功能,可能与现在使用的插件冲突,而有的插件版本或主题不兼容你现在使用的Wordpress版本       下面是WordPress前台后台出现空白的解决办法:   方法一:通过FTP重新命名当前启用的主题:   把当前安装的主题文件夹重命名的话,会强制WordPress自动选择默认的主题,然后就可以正常载入了。
2519 0
wordpress后台提示内存不足的解决办法
本人是个小小的站长,在美国那边买了个HostEase的主机。用Wordpress建博客的时候,前段时间还好好的,但今天不知道是这么回事,网站首页可以打开,但进后台的时候遇到这样类似的错误提示: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate xxx bytes) 意思就是word
1884 0
程序结束后记得提醒我
前段时间在做论文数值模拟的时候,得跑非常久的代码,一旦模拟次数增加就要等好几个小时。所以会另开界面做其他事情(写理论部分,看文献啥的)。但是看着看着,可能就忘记R还在跑的事了。等我想起来,代码早就跑好了😒。
127 0
|
数据库
如何重置Joomla并解决文件或数据库问题
如果您在Joomla网站上遇到问题,那么重新安装其核心文件和数据库可能是最好的解决方案。
如何重置Joomla并解决文件或数据库问题
|
JavaScript 前端开发 PHP
最新解决Discuz!X3.4以下版本前台打开卡慢、后台登陆卡死或504错误等问题
Discuz!X3.4以下的版本前台打开卡慢、后台登陆卡死或504错误的问题
5547 0
沙箱报错:系统有点儿忙,一会儿再试试
说明 沙箱有定期维护,维护期间如果测试会报错。临时维护也会有类似报错,敬请谅解。  沙箱公告 说明(如下图)访问地址:[url]https://openhome.alipay.com/platform/appDaily.htm?tab=info[/url] 沙箱维护时间 每周日中午12点至每周一中午12点沙箱环境进行维护,期间可能出现不可用。
2983 0
|
数据库
如果您遇到文件或数据库问题,如何重置Joomla
如果您遇到Joomla站点的问题,那么重新安装其核心文件和数据库可能是最佳解决方案。 了解问题 这种方法无法解决您的所有问题。但它主要适用于由Joomla核心引起的问题。 运行Joomla核心更新后,这些类型的问题通常会出现。