Entwickler-Ecke
Programmiersprachen (Server) - Probleme mit Session-Funktionen (PHP)
JungerIslaender - So 30.08.09 23:14
Titel: Probleme mit Session-Funktionen (PHP)
Warum funktioniert das hier:
Quelltext
1: 2: 3:
| session_start(); session_register('username'); $username = $_POST['username']; |
das hier aber nicht:
Quelltext
1: 2: 3: 4:
| session_start(); session_register('useremail'); $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'"; $useremail = mysql_query($abfrage); |
Moderiert von
Narses: Titel geändert, war: "Wo ist der Fehler(2)??? php".
Moderiert von
Christian S.: Topic aus Off Topic verschoben am Mo 31.08.2009 um 20:20
BenBE - So 30.08.09 23:47
Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt?
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen.
JungerIslaender - Mo 31.08.09 15:55
BenBE hat folgendes geschrieben : |
Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt? |
Wie mache ich das??
BenBE hat folgendes geschrieben : |
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen. |
Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird.
Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet.
andras - Mo 31.08.09 17:42
JungerIslaender hat folgendes geschrieben : |
Warum funktioniert das hier:
Quelltext 1: 2: 3: 4:
| session_start(); session_register('useremail'); $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'"; $useremail = mysql_query($abfrage); |
|
Weil deine Variable im string steht und somit nicht der Wert der Variable genommen wird sondern der Name, aber ganz sicher bin ich mir da nicht...
Hätte das ganze so gelöst:
Quelltext
1: 2: 3: 4:
| session_start(); session_register('useremail'); $abfrage = "SELECT email FROM konten WHERE user LIKE ".$username; $useremail = mysql_query($abfrage); |
BenBE - Mo 31.08.09 18:53
JungerIslaender hat folgendes geschrieben : |
BenBE hat folgendes geschrieben : | Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt? |
Wie mache ich das?? |
http://php.net/error_reporting
JungerIslaender hat folgendes geschrieben : |
BenBE hat folgendes geschrieben : |
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen. |
Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird. |
Wird er auch ... und der Benutzer hat Einfluss darauf ...
JungerIslaender hat folgendes geschrieben : |
Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet. |
hmmm, War das bei "PHP in 14 Tagen" im Vorwort oder der Einleitung schon behandelt??? Oder fällt das unter Esotherische Programmierweise, weil dann würde ich Sprachen wie Whitespace empfehlen - dann sieht wenigstens keiner den Code. ;-)
JungerIslaender hat folgendes geschrieben : |
Warum funktioniert das hier:
Quelltext 1: 2: 3: 4:
| session_start(); //Starte eine Session, oder nehme die aktuelle wieder auf session_register('useremail'); //Registriere die Variable $username in der Session (IIRC) $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'"; //Greife auf die undefinierte Variable $username zu $useremail = mysql_query($abfrage); | //Führe eine Abfrage nach einem leeren Username durch
|
Tut doch, was du ihm gesagt hast ...
Ich empfehle hier mal den vollständigen Verzicht auf die Nutzung von RegisterGlobals-Magic, oder anderen PHP-Convenience-Funktionen; die reißen mehr Probleme, als sie beheben ... $_SESSION ist hier die Antwort. Dann kann übrigens auch das session_register wegfallen.
andras hat folgendes geschrieben : |
Weil deine Variable im string steht und somit nicht der Wert der Variable genommen wird sondern der Name, aber ganz sicher bin ich mir da nicht... |
Ach die Variable $username wird schon ausgewertet ... die ist nur undefiniert, weil RegisterGlobals auf ordentlich konfigurierten Servern abgeschlatet ist und damit die Session nicht automatisch entpackt wird.
andras hat folgendes geschrieben : |
Hätte das ganze so gelöst:
Quelltext 1: 2: 3: 4:
| session_start(); session_register('useremail'); $abfrage = "SELECT email FROM konten WHERE user LIKE ".$username; $useremail = mysql_query($abfrage); | |
http://xkcd.com/327/
Mal abgesehen davon, dass das so auch nicht gehen wird ...
Christian V. - Mo 31.08.09 20:33
Quelltext
1:
| $useremail = mysql_query($abfrage); |
ist vermutlich auch nicht was du willst...
http://php.net/mysql_query
Moderiert von
Klabautermann: Code- und Url-Tags hinzugefügt
jcp - Sa 24.10.09 19:23
Quelltext
1:
| session_register('useremail'); |
ist veraltet und sollte nicht mehr genutzt werden!
Quelltext
1: 2: 3: 4: 5:
| session_start(); global $useremail = false; if (isset($_SESSION['useremail'])){ $useremail = $_SESSION['useremail']; } |
Moderiert von
Klabautermann: Code-Tags hinzugefügt.
JungerIslaender - Mi 28.10.09 23:09
Cool Danke werd ich sofort ausprobieren.
jcp - Do 29.10.09 12:55
Hidiho,
ein Tip möchte ich Dir noch geben. Du solltest niemals in deinen Quelltexten $_POST, $_GET, $_SESSION oder $_SERVER verwenden. Stattdessen solltest Du gegen Schnittstellen programmieren. Ich habe für Dich hier meine Session Klassen vereinfacht als eine Klasse dargestellt, vielleicht kannste damit was anfangen und weiter ausbauen, viel Glück!
Quelltext
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: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164:
| // session temp path //ini_set('seesion.save_path', "n;/temp");
// session no hang on URLs ini_set('seesion.use_trans_sid', "0");
// sesion use only cookies ini_set('seesion.use_only_cookies', "0"); ini_set('seesion.use_cookies', "1");
// session no autostart ini_set('seesion.auto_start', "0");
// session trash leeren ca. aller 100 Aufrufe //ini_set('session.gc_probability', "1"); //ini_set('session.gc_divisor', "100"); class jcp_session {
static $expires = 120; private $crypt; private $session; private $userexpires; private $session_name;
public function __construct( $name = false, $time = false, $crypt = null ) { $this->session_name = $name; $this->userexpires = $time; $this->crypt = $crypt; $this->session = array();
if ($this->session_name){ session_name( $this->session_name ); } session_start();
if (is_array($_SESSION) && !empty($_SESSION) && isset($_SESSION['verfall'])){
if ($this->check()){ $this->session = $_SESSION; $this->session['verfall'] = time(); $_SESSION = array(); } }
}
public function save() { $_SESSION = $this->session; return true; }
public function add( $var, $value) { if ( ! is_string( $var )){ return false; } $this->_add($var, $value); return true; }
public function get( $offset ) { if ( is_string( $offset )){ return $this->_get($offset); }
if (!is_array($offset) || empty( $offset )){ return null; }
$values = array(); foreach ( $offset as $index){ $values[$index] = $this->_get($index); }
if ( empty($values)){ return null; }
return $values; }
public function delete( $offset = null ) { if ( is_null( $offset )){ return $this->_delete(); } elseif (is_string($offset)) { return $this->_del( $offset ); } else { return false; } }
private function _del( $offset ) { if ( isset( $this->session[$offset] )){ unset($this->session[$offset]); } return true; }
private function _delete() { $_SESSION = array(); $this->session = array(); @setcookie(session_name(), '', 0, "/"); session_destroy(); return true; }
private function _get( $offset ) { if ( isset( $this->session[$offset] )){ if (!is_null($this->crypt)){ return $this->crypt->encrypt($this->session[$offset]); } return $this->session[$offset]; } return null; }
private function _add( $varname, $value ) { if (!is_null($this->crypt)){ $value = $this->crypt->encrypt($value); } $this->session['verfall'] = time(); $this->session[$varname] = $value; }
private function check() { $zeit_old = $_SESSION['verfall']; if ($this->userexpires){ $zeit_new = strtotime( '-'.$this->userexpires.' minutes'); } else { $zeit_new = strtotime( '-'.self::$expires.' minutes'); }
if ( $zeit_new < $zeit_old ) { return true; } else { $this->_delete(); if ($this->session_name){ session_name( $this->session_name ); } session_start(); session_regenerate_id(true); return false; } }
}// Class End |
Quelltext
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:
| inferface jcp_crypt_interface { protected function encrypt( $plaintext ); protected function decrypt( $crypttext ); } class jcp_crypt implements jcp_crypt_interface { static $cypher = 'blowfish'; static $mode = 'cfb'; static $key = 'JCP-Nice_27985_GirlsInBikiniOnMyPrivateBeach';
protected function encrypt( $plaintext ) { $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, self::$key, $iv); $crypttext = mcrypt_generic($td, $plaintext); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $iv.$crypttext; }
protected function decrypt( $crypttext ) { $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $ivsze = mcrypt_enc_get_iv_size($td); $iv = substr($crypttext,0,$ivsze); $crypttext = substr($crypttext, $ivsze); $plaintext = ''; if ($iv){ mcrypt_generic_init($td, self::$key, $iv); $plaintext = mdecrypt_generic($td,$crypttext); mcrypt_generic_deinit($td); } mcrypt_module_close($td); return $plaintext; }
} //Class End |
Aufruf
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| $session = new jcp_session('my_session',7900, new jcp_crypt()); //hinzufügen $session->add('var_a','mama'); $session->add('var_b','papa');
//auslesen $var_a = $sesion->get('var_a'); $var_b = $sesion->get('var_b');
//löschen $session->delete('var_a'); $session->delete('var_b');
//alle löschen $session->delete();
//session am ende zurück schreiben $session->save(); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!