hey. jeg har et lille script til at bruge mysql som session lager, fra "php-security-2005", og scriptet ser ud som følger: (paster det fulde script hvis der er brug for rettelser flere steder end det sted spørgsmålet hér handler om) <?PHP 1 session_set_save_handler('_open', 2 '_close', 3 '_read', 4 '_write', 5 '_destroy', 6 '_clean'); 7 function _open() 8 { 9 global $_sess_db; 10 $db_user = $_SERVER['DB_USER']; 11 $db_pass = $_SERVER['DB_PASS']; 12 $db_host = 'localhost'; 13 if ($_sess_db = mysql_connect($db_host, $db_user, 14$db_pass)) 15 { 16 return mysql_select_db('sessions', $_sess_db); 17 } 18 return FALSE; 19 } 20 function _close() 21 { 22 global $_sess_db; 23 return mysql_close($_sess_db); 24 } 25 function _read($id) 26 { 27 global $_sess_db; 28 $id = mysql_real_escape_string($id); 29 $sql = "SELECT data 30 FROM sessions 31 WHERE id = '$id'"; 32 if ($result = mysql_query($sql, $_sess_db)) 33 { 34 if (mysql_num_rows($result)) 35 { 36 $record = mysql_fetch_assoc($result); 37 return $record['data']; 38 } 39 } 40 return ''; 41 } 42 function _write($id, $data) 43 { 44 global $_sess_db; 45 $access = time(); 46 $id = mysql_real_escape_string($id); 47 $access = mysql_real_escape_string($access); 48 $data = mysql_real_escape_string($data); 49 $sql = "REPLACE 50 INTO sessions 51 VALUES ('$id', '$access', '$data')"; 52 return mysql_query($sql, $_sess_db); 53 } 54 function _destroy($id) 55 { 56 global $_sess_db; 57 $id = mysql_real_escape_string($id); 58 $sql = "DELETE 59 FROM sessions 60 WHERE id = '$id'"; 61 return mysql_query($sql, $_sess_db); 62 } 63 function _clean($max) 64 { 65 global $_sess_db; 66 $old = time() - $max; 67 $old = mysql_real_escape_string($old); 68 $sql = "DELETE 69 FROM sessions 70 WHERE access < '$old'"; 71 return mysql_query($sql, $_sess_db); 72 } 73?> men scriptet som det er skrevet i guiden, og ctrl-c/v'et, giver følgende fejlmeddelelse: "Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in o:\public\www\system\scripts\db_sessions.php on line 23" .... warum??
Er du sikker på du får forbindelse til mysql når du konnekter. Din fejl kan skyldes at den ikke får forbindelse til mysql, derved bliver $_sess_db ikke til en mysql-link.
Det kan sagtens tænkes at være dér den ligger. Hvis scriptet som det er dér burde virke, og det burde trods alt, kilden taget i betragtning ;) Tænkte det kunne være en syntaks der var ændret siden dokumentets undfangelse, men jeg kører ikke med nyeste php/mysql, så 2005 er jo ikke uddateret i dén henseende.
Hvis jeg var dig ville jeg lige lave et echo når du prøve at oprette en for bindelse til mysql, så kan du se om det lykkes eller om den fejler.
Nu ved jeg ikke lige hvilken version af php du kører, men hvorfor laver du ikke en class istedet, så kan du samle alle dine funktioner der. Så slipper du for global.
Jeg HAR prøvet at indsætte nogen ECHO's for at se hvad og hvor meget der sker hvornår, som følger: 13 if ($_sess_db = mysql_connect($db_host, $db_user, 14$db_pass)) 15 { 16 echo "fejl1"; return mysql_select_db('sessions', $_sess_db); 17 } 18 echo "fejl2"; return FALSE; 19 }
Jeg har oprettet en database der hedder 'sessions', og fyldt med den SQL kommando der nævnes i dokumentet: "CREATE TABLE sessions ( id varchar(32) NOT NULL, access int(10) unsigned, data text, PRIMARY KEY (id) );" Jeg ændrede også henvisngerne til brugernavn/psw til at være direkte oprettelse af variabel/værdi istedet for henvisning til en konstant med data'ene i, men det er samme fejlmeddelelse der kommer ud af det :( Min php,MySQL og Apache version de der fulgte med "EasyPHP 1.7", som nu er i en 1.8 der benytter "Apache 2.2.3 - PHP 5.2.0 - MySQL 5.0.27 - PHPMyAdmin 2.9.1.1 - SQLiteManager 1.2.0" (fra hjemmesiden, easyphp.org). Og valget af metode er fordi det er den metode jeg lige havde ved hånden til ctrl-c/v fra dokumentet. Ku godt være jeg skulle køre version 1.8 af EasyPHP med nyere versioner af alle elementer og se hvad phpsec har at foreslå om dét
He he..jeg vover skindet på næsen og 'blander' mig igen :)
Mangler du ikke en session_start(); ?
Hvis du smider denne ind til sidst f.eks. får du da fejl ?
Mvh. Johan
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.