Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Ein sessionbasiertes Loginsystem

Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 31.08.2006, 10:38 Nach oben    #21
coal16
 
Beiträge: n/a
Standard

Mein letzter Post sollte ungefähr das heissen: Hilfeeee!!!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 15:17 Nach oben    #22
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Zitat:
Zitat von coal16 Beitrag anzeigen
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.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 16:47 Nach oben    #23
coal16
 
Beiträge: n/a
Standard

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??
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 17:01 Nach oben    #24
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

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.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 17:26 Nach oben    #25
coal16
 
Beiträge: n/a
Standard

Kriegst PN...
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 17:33 Nach oben    #26
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Zitat:
Zitat von coal16 Beitrag anzeigen
Kriegst PN...
Kein Support via PN, ICQ, Mail.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2006, 18:03 Nach oben    #27
coal16
 
Beiträge: n/a
Standard

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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.09.2006, 16:33 Nach oben    #28
coal16
 
Beiträge: n/a
Standard

Keiner ne Idee??
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.09.2006, 16:36 Nach oben    #29
Chr!s
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 560
Standard

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(); ..
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.09.2006, 16:37 Nach oben    #30
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

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?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.09.2006, 13:10 Nach oben    #31
coal16
 
Beiträge: n/a
Standard

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.09.2006, 22:24 Nach oben    #32
coal16
 
Beiträge: n/a
Standard

??
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.09.2006, 00:38 Nach oben    #33
WarrenFaith
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.498
Standard

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.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.09.2006, 21:31 Nach oben    #34
coal16
 
Beiträge: n/a
Standard

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...
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.09.2006, 23:20 Nach oben    #35
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

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.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.09.2006, 18:06 Nach oben    #36
coal16
 
Beiträge: n/a
Standard

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..
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 14:15 Nach oben    #37
Chrissi
Neuer Benutzer
 
Registriert seit: 15.03.2007
Beiträge: 2
Standard

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:
Zitat:
session_start();


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 16:47 Uhr).
Chrissi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 14:34 Nach oben    #38
dsxs
leftover when bar closes
 
Benutzerbild von dsxs
 
Registriert seit: 29.06.2006
Ort: Bern
Beiträge: 123
Standard

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

dsxs ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2007, 14:55 Nach oben    #39
Chrissi
Neuer Benutzer
 
Registriert seit: 15.03.2007
Beiträge: 2
Standard

AAAAAAhhh! Danke!
Chrissi ist offline  
Add Post to del.icio.usBookmark Post in Technorati