IPv6无法进入管理员后台

2024-07-29 15:24 更新

为了获取更多最新内容及功能更新,请直接访问我们的首页以查看DzzOffice笔记的最新地址。

描述

在采用IPv6网络连接时,管理员后台登录存在问题。

原因分析:

因为数据库表字段长度和数据库表代码未考虑IPv6的问题。

解决方法

以下操作均需要无人访问网站,操作完成后,需要重新访问网站才能正常使用。

pichome 步骤

打开pichome数据库,找到pichome_admincp_session数据库表,修改ip字段的长度为45。 至此,管理员即可使用IPv6访问后台。修改pichome_session数据库表,将ip1ip2ip3ip4这四个字段合为一个字段,并将其命名为ip字段(即删除其中三个字段,剩余的一个重命名为ip),并将其字段类型改为varchar,长度改为45。同时,修改数据库表pichome_failedlogin,修改ip字段类型改为varchar,长度改为45。至此,系统所有的ip地址都能记录IPv6的地址了。

DzzOffice 步骤

打开DzzOffice数据库,找到dzz_admincp_session数据库表,修改ip字段的长度为45。 至此,管理员即可使用IPv6访问后台。修改dzz_session数据库表,将ip1ip2ip3ip4这四个字段合为一个字段,并将其命名为ip字段(即删除其中三个字段,剩余的一个重命名为ip),并将其字段类型改为varchar,长度改为45。同时,修改数据库表dzz_failedlogin,修改ip字段类型改为varchar,长度改为45。至此,系统所有的ip地址都能记录IPv6的地址了。

通用步骤

文件\core\class\dzz\dzz_session.php

原代码

private $newguest = array('sid' => 0, 'ip1' => 0, 'ip2' => 0, 'ip3' => 0, 'ip4' => 0, 'uid' => 0, 'username' => '', 'groupid' => 0, 'invisible' => 0, 'action' => 0, 'lastactivity' => 0, 'lastolupdate' => 0);

修改为

private $newguest = array('sid' => 0, 'ip' => '', 'uid' => 0, 'username' => '', 'groupid' => 0, 'invisible' => 0, 'action' => 0, 'lastactivity' => 0, 'lastolupdate' => 0);

原代码

public function set($key, $value) { if(isset($this->newguest[$key])) { $this->var[$key] = $value; } elseif ($key == 'ip') { $ips = explode('.', $value); $this->set('ip1', $ips[0]); $this->set('ip2', $ips[1]); $this->set('ip3', $ips[2]); $this->set('ip4', $ips[3]); } } public function get($key) { if(isset($this->newguest[$key])) { return $this->var[$key]; } elseif ($key == 'ip') { return $this->get('ip1').'.'.$this->get('ip2').'.'.$this->get('ip3').'.'.$this->get('ip4'); } }

修改为

public function set($key, $value) { if(isset($this->newguest[$key])) { $this->var[$key] = $value; } } public function get($key) { if(isset($this->newguest[$key])) { return $this->var[$key]; } }
文件\core\class\dzz\dzz_session_close.php

原代码

protected $newguest = array('sid' => 0, 'ip1' => 0, 'ip2' => 0, 'ip3' => 0, 'ip4' => 0, 'uid' => 0, 'username' => '', 'groupid' => 0, 'invisible' => 0, 'action' => 0, 'lastactivity' => 0, 'fid' => 0, 'tid' => 0, 'lastolupdate' => 0);

修改为

protected $newguest = array('sid' => 0, 'ip' => '', 'uid' => 0, 'username' => '', 'groupid' => 0, 'invisible' => 0, 'action' => 0, 'lastactivity' => 0, 'fid' => 0, 'tid' => 0, 'lastolupdate' => 0);

原代码

public function set($key, $value) { if(isset($this->newguest[$key])) { $this->var[$key] = $value; } elseif ($key == 'ip') { $ips = explode('.', $value); $this->set('ip1', $ips[0]); $this->set('ip2', $ips[1]); $this->set('ip3', $ips[2]); $this->set('ip4', $ips[3]); } } public function get($key) { if(isset($this->newguest[$key])) { return $this->var[$key]; } elseif ($key == 'ip') { return $this->get('ip1').'.'.$this->get('ip2').'.'.$this->get('ip3').'.'.$this->get('ip4'); } }

修改为

public function set($key, $value) { if(isset($this->newguest[$key])) { $this->var[$key] = $value; } } public function get($key) { if(isset($this->newguest[$key])) { return $this->var[$key]; } }
文件\core\class\table\table_session.php

原代码

public function fetch($sid, $ip = false, $uid = false) { if(empty($sid)) { return array(); } $this->checkpk(); $session = parent::fetch($sid); if($session && $ip !== false && $ip != "{$session['ip1']}.{$session['ip2']}.{$session['ip3']}.{$session['ip4']}") { $session = array(); } if($session && $uid !== false && $uid != $session['uid']) { $session = array(); } return $session; }

修改为

public function fetch($sid, $ip = false, $uid = false) { if(empty($sid)) { return array(); } $this->checkpk(); $session = parent::fetch($sid); if($session && $ip !== false && $ip != "{$session['ip']}") { $session = array(); } if($session && $uid !== false && $uid != $session['uid']) { $session = array(); } return $session; }

原代码

public function delete_by_session($session, $onlinehold, $guestspan) { if(!empty($session) && is_array($session)) { $onlinehold = time() - $onlinehold; $guestspan = time() - $guestspan; $session = daddslashes($session); $condition = " sid='{$session[sid]}' "; $condition .= " OR lastactivity<$onlinehold "; $condition .= " OR (uid='0' AND ip1='{$session['ip1']}' AND ip2='{$session['ip2']}' AND ip3='{$session['ip3']}' AND ip4='{$session['ip4']}' AND lastactivity>$guestspan) "; $condition .= $session['uid'] ? " OR (uid='{$session['uid']}') " : ''; DB::delete('session', $condition); } }

修改为

public function delete_by_session($session, $onlinehold, $guestspan) { if(!empty($session) && is_array($session)) { $onlinehold = time() - $onlinehold; $guestspan = time() - $guestspan; $session = daddslashes($session); $condition = " sid='{$session[sid]}' "; $condition .= " OR lastactivity<$onlinehold "; $condition .= " OR (uid='0' AND ".DB::field('ip', $session['ip'])." AND lastactivity>$guestspan) "; $condition .= $session['uid'] ? " OR (uid='{$session['uid']}') " : ''; DB::delete('session', $condition); } }

原代码

public function count_by_ip($ip) { $count = 0; if(!empty($ip) && ($ip = explode('.', $ip)) && count($ip) > 2 ) { $count = DB::result_first('SELECT COUNT(*) FROM '.DB::table('session')." WHERE ip1='$ip[0]' AND ip2='$ip[1]' AND ip3='$ip[2]'"); } return $count; } public function fetch_all_by_ip($ip, $start = 0, $limit = 0) { $data = array(); if(!empty($ip) && ($ip = explode('.', $ip)) && count($ip) > 2 ) { $data = DB::fetch_all('SELECT * FROM %t WHERE ip1=%d AND ip2=%d AND ip3=%d ORDER BY lastactivity DESC'.DB::limit($start, $limit), array($this->_table, $ip[0], $ip[1], $ip[2]), null); } return $data; }

修改为

public function count_by_ip($ip) { $count = 0; if(!empty($ip)) { $count = DB::result_first('SELECT COUNT(*) FROM '.DB::table('session')." WHERE ".DB::field('ip', $ip)); } return $count; } public function fetch_all_by_ip($ip, $start = 0, $limit = 0) { $data = array(); if(!empty($ip)) { $data = DB::fetch_all('SELECT * FROM %t WHERE ip=%s ORDER BY lastactivity DESC'.DB::limit($start, $limit), array($this->_table, $ip), null); } return $data; }


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号