Natürlich haben die Entwickler kein Interesse - wie so viele Jahre zuvor auch nicht ..
Was das Problem angeht (ich kanns bei mir nicht direkt testen) hab ich da vielleicht eine Vermutung.
Die IPv4 besteht ja aus einer Zeichenfolge (glaub auch nur Zahlen) wie diese (Lokalhost):
| PHP-Quelltext 127.0.0.1 | |
IPv6 sieht so aus (wieder Lokalhost):
| PHP-Quelltext 0000:0000:0000:0000:0000:0000:0000:0001 | |
Das PHPKIT speichert für jeden User die aktuelle Session, also den Aufenhalt - egal ob eingelogt oder nur als Gast.
Darunter halt auch die IP. Und genau da liegt wahrscheinlich das Problem. Den der Speichersatz für die IP beträgt 15 Zeichen. Ausreichend für die alte IPv4. Die IPv6 aber hat (oder kann bis zu?) 39 Zeichen (
siehe hier ).
Deswegen vermute ich, wenn der Zeichensatz in der DB abgeändert wird sollte es keine Probleme mit den Login geben.
Da nicht jeder direkten Zugang zur DB hat hier mal ein schnelles Script dafür:
- pkinc/public/DBUpdateIPv6.php
- Erstelle o.g. Datei (vorhandene .php-Datei kopieren und die kopierte Datei wie oben umbenennen) und füge folgenden Code ein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | | PHP-Quelltext <?PHP
If (!Defined('pkFRONTEND') || pkFRONTEND!='public')
{
Die('Direct access to this location is not permitted.');
}
If (Intval(pkGetUservalue('id'))!==1)
{
pkEvent('page_not_found');
return;
}
If (IsSet($_POST) && !Empty($_POST))
{
# SQL Command
$SQLPublic
="
SELECT
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '".pkSQLTAB_SESSION."'
AND
column_name = 'session_ip'
";
$SQLAdmin
="
SELECT
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '".pkSQLTAB_ADMINSESSION."'
AND
column_name = 'session_ip'
";
# SQL Query
$SQLPublic=$SQL->Fetch_Row($SQL->Query($SQLPublic));
$SQLAdmin =$SQL->Fetch_Row($SQL->Query($SQLAdmin));
# Var
$Public['Type'] =Trim ($SQLPublic[0]);
$Public['CharLength'] =Intval($SQLPublic[1]);
$Public['Update'] =0;
$Admin['Type'] =Trim ($SQLAdmin[0]);
$Admin['CharLength'] =Intval($SQLAdmin[1]);
$Admin['Update'] =0;
# Update to IPv6
If (IsSet($_POST['IPv6']))
{
# Check
If ($Public['CharLength']===15)
{
$Public['Update']
=
$SQL->Query("ALTER TABLE `".pkSQLTAB_SESSION."` CHANGE `session_ip` `session_ip` VARCHAR(39)")
? TRUE
: FALSE
;
}
If ($Admin['CharLength']===15)
{
$Admin['Update']
=
$SQL->Query("ALTER TABLE `".pkSQLTAB_ADMINSESSION."` CHANGE `session_ip` `session_ip` VARCHAR(39)")
? TRUE
: FALSE
;
}
}
# Update to IPv4
If (IsSet($_POST['IPv4']))
{
# Check
If ($Public['CharLength']===39)
{
$Public['Update']
=
$SQL->Query("ALTER TABLE `".pkSQLTAB_SESSION."` CHANGE `session_ip` `session_ip` VARCHAR(15)")
? TRUE
: FALSE
;
}
If ($Admin['CharLength']===39)
{
$Admin['Update']
=
$SQL->Query("ALTER TABLE `".pkSQLTAB_ADMINSESSION."` CHANGE `session_ip` `session_ip` VARCHAR(15)")
? TRUE
: FALSE
;
}
}
}
?>
<Table Class="standard" Border="0" CellSpacing="1" CellPadding="4" Width="100%">
<TR>
<TD Class="heads">PHPKIT ( 1.6.4. bis 1.6.6.) » Update / Fix » IPv4 auf IPv6</TD>
</TR>
<TR>
<TD Class="standard" align="center">
<Form Action="?path=<?PHP Echo $path; ?>" Method="Post">
<Input Type="Submit" Name="IPv6" Value="Auf IPv6 updaten" />
<Input Type="Submit" Name="IPv4" Value="Auf IPv4 zurück-updaten" />
</Form>
<BR />
<BR />
<?PHP If (IsSet($_POST) && !Empty($_POST)): ?>
<Span Style="Font-Weight: Bold;">Update auf <?PHP Echo IsSet($_POST['IPv6']) ? 'IPv6' : 'IPv4'; ?>:</Span>
<BR />
<BR />
<?PHP EndIf; ?>
<?PHP If (IsSet($Public['Update'])): ?>
<?PHP If ($Public['Update']===TRUE): ?>
<Span Style="Color: Green;">Die Tabelle "<?PHP Echo pkSQLTAB_SESSION; ?>" wurde erfolgreich abgeändert.</Span>
<?PHP ElseIf ($Public['Update']===FALSE): ?>
<Span Style="Color: Red;">Die Tabelle "<?PHP Echo pkSQLTAB_SESSION; ?>" wurde nicht abgeändert.</Span>
<BR />
<?PHP $SQL->error(); ?>
<?PHP Else: ?>
<Span Style="">Die Tabelle "<?PHP Echo pkSQLTAB_SESSION; ?>" wurde bereits abgeändert.</Span>
<?PHP EndIf; ?>
<BR />
<?PHP EndIf; ?>
<?PHP If (IsSet($Admin['Update'])): ?>
<?PHP If ($Admin['Update']===TRUE): ?>
<Span Style="Color: Green;">Die Tabelle "<?PHP Echo pkSQLTAB_ADMINSESSION; ?>" wurde erfolgreich abgeändert.</Span>
<?PHP ElseIf ($Admin['Update']===FALSE): ?>
<Span Style="Color: Red;">Die Tabelle "<?PHP Echo pkSQLTAB_ADMINSESSION; ?>" wurde nicht abgeändert.</Span>
<BR />
<?PHP $SQL->error(); ?>
<?PHP Else: ?>
<Span Style="">Die Tabelle "<?PHP Echo pkSQLTAB_ADMINSESSION; ?>" wurde bereits abgeändert.</Span>
<?PHP EndIf; ?>
<?PHP EndIf; ?>
</TD>
</TR>
</Table> | |
|
O.g. Datei wie oben beschrieben in den o.g. Ordner und wie folgt aufrufen:
| PHP-Quelltext http://www.DeineSeite.de/?path=DBUpdateIPv6 | |
Es erscheint dann ein kleines Menu zum Updaten der Datenbank. Genauer gesagt der Tabellen
_adminsession und
_session, dort jeweils die Spalten
session_ip auf die nötige Zeichenlänge 39. Man kann dies auch rückgängig machen. In diesen Fall die Zeichenlänge 15.