 | |
31.08.2006, 10:38
| Nach oben
#21 | | Gast |
Mein letzter Post sollte ungefähr das heissen: Hilfeeee!!!
| |
| |
31.08.2006, 15:17
| Nach oben
#22 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
| Zitat:
Zitat von coal16 if pageid = 116 dann prüfe, ob eine gültige session vorliegt und leite weiter an url ...
das gleiche dann nochmal für eine zweite pageid und 2.url ... | Meinst du so etwas? PHP-Code: if($pageid == 116 or $pageid == 100) // die 100 als Beispiel
{
if(!$_SESSION['loggedIn'])
{
header('Location: http://localhost/loginformular.html' );
exit();
}
}
// ich weiß nicht genau, was das hier machen soll, aber okay. So würde es dann halt weitergehen!
if($pageid!=0)
{
$showpage = $obj_pages->page_is_published($pageid);
}
// ..
Das session_start() brauchst du auf jeden Fall in der "index.php". Einfach ganz oben reinschreiben.
Grüße, Ben.
|
| |
31.08.2006, 16:47
| Nach oben
#23 | | Gast |
Danke, das meinte ich!
Jetzt aber folgendes Problem. Das bereits von mir angedeutete CMS scheint für dessen Login auch Sessions zu benutzen. Daher kommt vielleicht die folgende Fehlermeldung:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ...\index.php:1) in ...\class.session.inc.php on line 117
Das passiert übrigens unabhängig davon, ob ich session_start() in der index.php eingefügt habe, oder nicht...
Gibts da ne Lösung??
| |
| |
31.08.2006, 17:01
| Nach oben
#24 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Nun, du rückst recht schwer mit Informationen raus, gell?
Wenn das CMS schon einen Login besitzt .. warum nutzt du dann eigentlich nicht diese Funktionalität, um die Seiten zu schützen?
Wäre sicherlich im Sinne der Konsistenz recht sinnvoll!
Was die Fehlermeldung besagt verrät dir dein Suchdienst deiner Wahl.
|
| |
31.08.2006, 17:33
| Nach oben
#26 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
| Zitat:
Zitat von coal16 Kriegst PN... | Kein Support via PN, ICQ, Mail.
|
| |
31.08.2006, 18:03
| Nach oben
#27 | | Gast |
Sorry, wußt ich nich.
Also...liegts daran, dass man nur einmal session_start() aufrufen darf oder hängts mit irgendwelchen Leerzeichen oder Ausgaben zusammen. Am Ende der anderen Session-geschichte steht folgender Code: PHP-Code: ... //--SESSION löschen //--gegenwärtige session-veriablen löschen: 1. unset / 2. destroy session_unset(); session_destroy(); //--damit wird die session gelöscht, nicht nur die session-daten! if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } } } session_start(); /* echo "cookie:::<br>"; __pr($_COOKIE); echo "session:::<br>"; __pr($_SESSION); echo session_id()."<br>"; */ ?>
Die Fehlermeldung(line 117) deutet auf session_start(); hin.
Ich will auch nicht wirklich die andere Loginvariante nehmen, weil es einen komplett anderen User betrifft und schliesslich sollen nicht die Mitglieder das CMS administrieren können. Wie umschiffe ich das jetzt ??
Geändert von Jann Hendrik (01.09.2006 um 09:04 Uhr)
Grund: php-BBCode-tag eingebaut.
| |
| |
01.09.2006, 16:36
| Nach oben
#29 | | Christian Mühlroth
Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Nun, gäbe die Möglichkeit des Output-Bufferings.
ob_start(); ganz ganz am anfang von allem was deine scripts betrifft, und gaaanz am ende dann ein ob_end_flush(); ..
|
| |
01.09.2006, 16:37
| Nach oben
#30 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Das Problem ist einfach, dass du ein gekauftes CMS verwendest, welches wir nicht kennen und du uns den Code nicht geben darst.
Somit können wir einfach nur raten.
session_start() nur einmal aufrufen .. joa!
Was passiert denn, wenn du es nur einmal aufrufst?
|
| |
02.09.2006, 13:10
| Nach oben
#31 | | Gast |
Mit dem Output-Buffering tut sich nix...gleiche Fehlermeldung...
Wenn ich session_start() nur in der index.php aufrufe kommt der Fehler trotzdem und zusätzlich kann ich mich nich mehr im CMS einloggen (is ja klar).
Ich poste jetzt mal die index.php komplett und anschliessend die class.session.inc.php
index.php: PHP-Code: <?php //--config include_once ('config/config.cms.php'); include_once ('admin/be_media/inc.config.php'); //--session einbinden include_once ('admin/be_media/class.session.inc.php'); $obj_session = new cms00_Session; //--config und funktionen einbinden include_once ('admin/be_media/inc.db.php'); include_once ('admin/be_media/xmlize.inc.php'); //--klassen einbinden include_once ('admin/be_media/class.backend.inc.php'); include_once ('admin/be_media/class.helpers.inc.php'); include_once ('admin/be_media/class.menus.inc.php'); include_once ('admin/be_media/class.pagetemplates.inc.php'); include_once ('admin/be_media/class.pagecats.inc.php'); include_once ('admin/be_media/class.pages.inc.php'); include_once ('admin/be_media/class.cte.inc.php'); include_once ('admin/be_media/class.container.inc.php'); include_once ('admin/be_media/class.content.inc.php'); include_once ('admin/be_media/class.articles.inc.php'); include_once ('admin/be_media/class.units.inc.php'); include_once ('admin/be_media/class.newsletter.inc.php'); //--klassen source include_once ('admin/be_media/class.pagesource.inc.php'); include_once ('admin/be_media/class.containersource.inc.php');
//--instanzen $obj_backend = new cms00_Backend; $obj_helpers = new cms00_Helpers; $obj_menus = new cms00_Menus; $obj_pagetemplates = new cms00_DefaultPageTemplates; $obj_pagecats = new cms00_Pagecats; $obj_pages = new cms00_Pages; $obj_cte = new cms00_cte; $obj_container = new cms00_Container; $obj_content = new cms00_Content; $obj_articles = new cms00_Articles; $obj_units = new cms00_Units; $obj_newsletter = new cms00_Newsletter;
//--bbcode include_once ('admin/be_ext/stringparser_bbcode.class.php'); $obj_bbcode = new StringParser_BBCode(); include_once ('admin/be_ext/inc.bbcode_settings.php');
//--local $showpage = false; $pageid = 0;
//--startpunkt (kickoff) $pageid_kickoff = 0; $menuitem_kickoff = $obj_menus->get_kickoff();
//__pr($menuitem_kickoff); if(!$menuitem_kickoff){ $pageid_kickoff = 0; }else if($menuitem_kickoff['menutype_absolute']=='PAGE' && $menuitem_kickoff['activated']){ if($obj_pages->page_is_published($menuitem_kickoff['menulink_absolute'])){ $pageid_kickoff = $menuitem_kickoff['menulink_absolute']; } } $pageid = $pageid_kickoff;
//--p/id/pageid per GET? if(isset($_REQUEST['p'])) $pageid = $_REQUEST['p']; if(isset($_REQUEST['id'])) $pageid = $_REQUEST['id']; if(isset($_REQUEST['pageid'])) $pageid = $_REQUEST['pageid'];
//--alias vorhanden? $alias_pageid = $obj_pages->get_uid_by_alias($pageid); if ($alias_pageid != 0) $pageid = $alias_pageid;
if($pageid!=0){ $pageid = $pageid*1; $showpage = $obj_pages->page_is_published($pageid); //--true/false } if($pageid == 116 or $pageid == 100) // die 100 als Beispiel { if(!$_SESSION['loggedIn']) { header('Location: http://www.gmx.de' ); exit(); } } //--startpunkt nehmen, falls gültig ($pageid_kickoff darf nicht 0 sein) if(!$showpage && $pageid_kickoff!=0){ $pageid = $pageid_kickoff; $showpage = true; }
//--Seite anzeigen nein/ja if(!$showpage){ echo "Die Seite kann leider nicht angezeigt werden"; exit; }else{
$current_path_2root = ''; // ---- instanzen $obj_page_source = new cms00_PageSource($pageid); $obj_container_source = new cms00_ContainerSource(); // ---- ini current page $current_page = $obj_pages->get_current_page($pageid); // ---- pfade in objekten korrigieren $obj_cte->current_path_2root = $current_path_2root; $obj_cte->current_path_cte = PATH_cte; $obj_content->current_path_2root = $current_path_2root;
// ---- Ausgabe if($current_page['published']==0){ echo "Page ist nicht publiziert"; }elseif ($current_page['publishtype']=='dynamic'){
echo str_replace(PATH_2ROOT_MARKER,$current_path_2root,$obj_page_source->get_page_source()); }elseif ($current_page['publishtype']=='static-html' || $current_page['publishtype']=='static-php' ){
$str_publishpath = $current_path_2root.$current_page['publishpath']; echo '<html><head>'; echo '<META HTTP-EQUIV="REFRESH" CONTENT="0;URL='.$str_publishpath.'">'; echo '</head></html>'; }elseif ($current_page['publishtype']=='halfstatic-php'){
$str_publishpath = $current_path_2root.$current_page['publishpath']; ob_start(); include ($str_publishpath); $str_page_source=ob_get_contents(); ob_end_clean(); $str_page_source = str_replace(PATH_2ROOT_MARKER,$current_path_2root,$str_page_source); echo $str_page_source;
}
}
?>
und nun die böse class.session.inc.php: PHP-Code:
<? class cms00_Session{ var $db_host; var $db_user; var $db_pass; var $db_name; var $db_beuser_table; var $user; function cms00_Session(){ $this->db_host = DB_HOST; $this->db_user = DB_USER; $this->db_pass = DB_PASS; $this->db_name = DB_NAME; $this->db_beuser_table = DB_TABLE_BEUSER; $this->db_connect();
$this->beuser = array(); //--user daten aus cookie lesen if (!isset($_COOKIE['user_logged_in'])){ //--wenn cookie nicht gesetzt, dann jetzt initialisieren $this->beuser['logged_in'] = false; }else{ if($_COOKIE['user_logged_in']=="1"){ $this->beuser['logged_in'] = true; $this->beuser['id'] = $_COOKIE['user_id']; $this->get_current_user(); }else{ $this->beuser['logged_in'] = false; $this->beuser['id'] = 0; } } //--userdaten vervollständigen }
function db_connect(){ $dbhost=$this->db_host; $dbuser=$this->db_user; $dbpass=$this->db_pass; $dbname=$this->db_name; $dbcon= mysql_pconnect($dbhost,$dbuser,$dbpass) or die(mysql_error()); mysql_select_db($dbname,$dbcon) or die(mysql_error()); }
function check_beuser($name, $pass){ $query = "SELECT uid FROM ".$this->db_beuser_table." WHERE username='".$name."' AND userpass=MD5('".md5($pass)."') LIMIT 1"; $result = db_query($query) or die(mysql_error()); if (mysql_num_rows($result)==1) { $user=mysql_fetch_assoc($result); return $user['uid']; }else{ return false; } }
function login($user_id){ //--cookies und objektvariables setzen setcookie("user_logged_in","1",time()+(24*3600)); $this->beuser['logged_in'] = true; setcookie("user_id",$user_id,time()+(24*3600)); $this->beuser['id'] = $user_id; //--db $query="UPDATE ".$this->db_beuser_table." SET usersession='".session_id()."' WHERE uid=".$user_id; db_query($query); //--userdaten vervollständigen $this->get_current_user(); //$_SESSION['user_id']=$user_id; } function get_current_user(){ $user_logged_in = ( isset($_COOKIE['user_logged_in']) ? $_COOKIE['user_logged_in'] : 0 ); //--vorzeitige rückgabe, falls noch nicht eingeloggt if($user_logged_in!="1") return false; if($this->beuser['logged_in']==false) return false; if(!isset($_COOKIE['user_id'])) return false; //--userid mit cookie abgleichen $this->beuser['id'] = $_COOKIE['user_id']; //--db-daten sammeln $query = "SELECT username, groupid FROM ".DB_TABLE_BEUSER." WHERE uid='".$this->beuser['id']."' LIMIT 1"; $result = db_query($query); //wenn nicht gefunden, so vorzeitiger abbruch - return 0 if(mysql_num_rows($result)==0) return false; $record = mysql_fetch_array($result, MYSQL_ASSOC); $this->beuser['name'] = $record['username']; $this->beuser['groupid'] = $record['groupid']; }
function logged_in(){ if($_COOKIE['user_logged_in']!="1") return false; return true; }
function logout(){ //--cookie und objektvariable setzen setcookie("user_logged_in","0",time()+(24*3600)); $this->beuser['logged_in'] = false; setcookie("user_id","",time()+(24*3600)); $this->beuser['id'] = ''; //--db $query="UPDATE ".$this->db_beuser_table." SET usersession=NULL WHERE usersession='".session_id()."'"; db_query($query); //--SESSION löschen //--gegenwärtige session-veriablen löschen: 1. unset / 2. destroy //session_unset(); //session_destroy(); //--damit wird die session gelöscht, nicht nur die session-daten! if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } } } session_start(); /* echo "cookie:::<br>"; __pr($_COOKIE); echo "session:::<br>"; __pr($_SESSION); echo session_id()."<br>"; */ ?>
Ich hoffe durch den Code wirds für Euch deutlicher...
Geändert von coal16 (02.09.2006 um 14:48 Uhr)
Grund: Code Tags eingefügt
| |
| |
04.09.2006, 00:38
| Nach oben
#33 | | Martin Breuer
Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Ich glaube das ist etwas argh problematisch sowas via Ferndiagnose zu lösen.
Entweder du versuchst dich beim CMS-Support oder du gehst Stück für Stück durch und versuchst zu debuggen.
Ansonsten ist das wie von Ben schon angesprochen: Fremdes CMS das wohl kaum einer kennt (vom Code her), da fällt das helfen besonders schwer.
Versuchs am Besten wirklich bei deren Support.
|
| |
04.09.2006, 21:31
| Nach oben
#34 | | Gast |
Mmmh, schade...
Was gibts denn noch für möglichkeiten für Login-skripte, außer sessionbasiert?
.htaccess kommt glaub ich für mich nicht in Frage, weil man da ja nur statische Dateien und Ordner schützen kann und keine a la http://forum.developers-guide.net/newreply.php?p=184, oder?
Ich würd ja auch über javascript oder perl gehen, aber da bin ich hier bestimmt im falschen Forum... | |
| |
04.09.2006, 23:20
| Nach oben
#35 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Du hast nicht verstanden, was wir dir sagen wollen.
Es ist schon günstig den Login via Session/Cookie laufen zu lassen, aber wir können dir einfach nicht helfen, da wir das CMS nicht kennen.
Und WarrenFaith hat Recht. Du hast ein CMS (gekauft). Dann hol dir den Support bei den Entwicklern.
Die müssen dir helfen können.
Grüße, Ben.
|
| |
09.09.2006, 18:06
| Nach oben
#36 | | Gast |
Hallo, ich mal wieder.
Hab jetzt rausgefunden, dass die ganze Site über nur über Sessions funktioniert. Das heißt, man kann nicht nur einfach prüfen, ob es eine Session gibt (weil die gibts auf jeden Fall schon vorm Login).
Ich sollte es ungefähr so machen: PHP-Code: <?php
if( empty($_SESSION['loggedIn'] )) { header( 'Location: http://localhost/loginformular.html' ); exit(); }
if( [benutzename und passwort stimmt]) { $_SESSION['loggedIn'] = "eingeloggt"; } ?> Also quasi soll durch die Sessionvariable der USEr/Pass geprüft werden!? Ich checks nich mehr...
Hilfeeee..
| |
| |
15.03.2007, 13:15
| Nach oben
#37 | | Neuer Benutzer
Registriert seit: 15.03.2007
Beiträge: 2
|
Hi, sorry das ich den alten Beitrag nochmal hoch hole! Aber ich habe dazu mal eine Frage: Ich bin nach dieser Anleitung gegangen, habe die dateien erstellt, config-datei mit meinen Daten ergänzt und dann aufgerufen!
Nach Eingabe des Namen und Passwortes bekomme ich folgende Fehlermeldung: Zitat: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /www/htdocs/..../admin/validateLogin.inc.php:1) in /www/htdocs/..../admin/validateLogin.inc.php on line 3 Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/..../admin/validateLogin.inc.php:1) in /www/htdocs/..../admin/validateLogin.inc.php on line 76 | So und in den betroffenen Zeilen 3 bzw 76 steht folgendes: Zeile 3:
Zeile 76: Zitat: |
header( 'Location: http://localhost/admin/geheim.php' );
| Könnt ihr mir weiterhelfen, was ich da machen muss?
Danke!
Geändert von Chrissi (15.03.2007 um 15:47 Uhr)
|
| |
15.03.2007, 13:34
| Nach oben
#38 | | leftover when bar closes
Registriert seit: 29.06.2006 Ort: Bern
Beiträge: 123
|
Hi Chrissi
Der Fehler liegt in der Datei "validateLogin.inc.php"
Und zwar wirst du dort in der ersten Zeile wahrscheinlich eine leere Zeile haben. Achte darauf, dass die erste Zeile in dieser Datei
<?php
lautet, und nichts anderes.
Grüsse
__________________ Unkraut ist die Opposition der Natur gegen die Regierung der Gärtner. ticketbörse |
| |
15.03.2007, 13:55
| Nach oben
#39 | | Neuer Benutzer
Registriert seit: 15.03.2007
Beiträge: 2
|
AAAAAAhhh! Danke! |
| |
15.03.2007, 14:07
| Nach oben
#40 | | Martin Breuer
Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Dieses Problem kommt durch Copy&Paste des Quellcodes aus dem Forum. Man kopiert meistens noch ein Leerzeichen mit
__________________ I did it my way - | |