kostenloser Webspace werbefrei: lima-city


Sessions

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    ich hab ein Script geschrieben, damit ich so ein bischen mit den Sessions rumzuspielen kann.

    Der Code:
    function rand_str($length = 8) {
      // Unwichtig, erzeugt einen zufalls-String mit l?nge $length
    }
    
    $PHP_SELF = basename($_SERVER['PHP_SELF']);
    
    session_start();
    session_name("sessionid_" . rand_str(8));
    session_id( md5(uniqid(rand_str(10),true)) );
    
    define("SESSID_QUERY",session_name() . "=" . session_id());
    define("PHP_SELF_SESSID",basename($_SERVER['PHP_SELF']) . "?" . SESSID_QUERY);
    
    if (!isset($_SESSION['total_calls'])) {
     $_SESSION['total_calls'] = 1;
    } else {
     $_SESSION['total_calls']++;
    }
    
    echo "<pre>\n";
    echo "<b>Session:</b>\n";
    echo "Session-ID:           " . session_id() . "\n";
    echo "Session-Name:         " . session_name() . "\n";
    echo "Session-array length: " . count($_SESSION) . "\n";
    echo "Session calls:        " . $_SESSION['total_calls'] . "\n";
    echo "SESSID_QUERY:         " . SESSID_QUERY . "\n";
    echo "PHP_SELF_SESSID:      " . PHP_SELF_SESSID . "\n";
    echo "\n\n\n";
    echo "<a href=\"" . PHP_SELF_SESSID . "\">refresh</a>";
    echo "</pre>";


    Wie ihr sehen k?nnt, wird ganz gew?hnlich eine Session ge?ffnet. Was ich jetzt mache ist, dass ich bei jedem Aufruf der Session den Session-Name und die Session-ID ?ndere, sodass mehr Sicherheit herscht.
    Es wird angezeigt, wie viel mal die Session schon aufgerufen wurde ($_SESSION['total_calls']). Das funktioniert aber nicht, da $_SESSION['total_calls'] immer 1 anzeigt.
    Warum das? Wird jedes mal eine neue Session erzeugt?
    Ich hab dann auch noch !isset statt empty verwendet, da empty ja false bei 0 zur?ckliefert, aber trotzdem funktioniert es nicht.

    Ich hoffe auf Hilfe.

    mfg,
    hr
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Schau mal spa?eshalber in die Cookie-Liste deines Browsers. Wenn mich nicht alles t?uscht, sammeln sich dort f?r deine benutzte Test-Domain eine Menge Cookies. Alle mit einem "zuf?lligen" Namen -- da du ja bei jedem Script-Aufruf einen neuen Namen erzeugst.
  4. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    ja genau, da sind viele Cookies, bei jedem Besuch ein neues. Aber warum geht es denn nicht, liegt das Problem an den Cookies? Ich denke nicht, denn ich ?bergibt die Session-id ja auch ?ber den query string, oder liegt doch das Problem daran?

    mfg,
    hr
  5. Du solltest nicht bei jedem Aufruf den session_name() ?ndern. Daran erkennen der Browser und dein Script die alte Session wieder. Wenn du diesen Wert jedesmal ?nderst, schl?gt ein isset() auf einen Wert in $_SESSION immer fehl, da ja das Session-Cookie immer neu angelegt wird ebenso die Session selbst.
  6. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    aber der Name wird doch erst ge?ndert, nachdem ich die Session ge?ffnet habe. Oder geht das gar nicht? Eigentlich erkennt das Script den User ja wieder, weil es ja weiss, welchen Namen die Session enth?llt, auch wenn er ge?ndert wird.

    Schonmal danke f?r die Hilfe.

    mfg,
    hr

  7. Hi,

    aber der Name wird doch erst ge?ndert, nachdem ich die Session ge?ffnet habe. Oder geht das gar nicht? Eigentlich erkennt das Script den User ja wieder, weil es ja weiss, welchen Namen die Session enth?llt, auch wenn er ge?ndert wird.

    Schonmal danke f?r die Hilfe.

    mfg,
    hr

    Anscheinend nein.
    Aber was willst du damit ?berhaupt erreichen?
    Sieht ziemlich unn?tz aus.
    Anstatt Fragen zu posten solltest du vllt auch den SInn dahinter posten, denn meist stimmt der Ansatz, wie die meisten es angehen, nicht.

    MfG Lucas
  8. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    Sorry, dass ich nciht richtig erkl?rt hab, f?r was ich das brauche.
    Der Zweck: Keinen. Also eigentlich nicht. Ich wollte mit diesem Script einfach mal die Sessions austesten. Wenn ich jetzt jedesmal den Session-Name und die Session-ID ?ndere, dann kann man das z.B. bei einem Login Script verwenden, sodass es viel sicherer ist, da ja die eine Session-ID oder den Session-Name nur einmal abrufbar ist (ausser n?turlich es wird wieder der gleiche zufallswert erzeugt, aber total unwahrscheinlich).

    Das Problem ist eben, dass es gar nicht funktioniert.
    Bei php.net steht aber, dass die Session dadurch nicht zerst?rt wird, es wird zumindest nicht erw?hnt.
    Ich m?chte jetzt wissen, wie man das machen kann, ohne dass das Script den "eingeloggten" User nicht mehr erkennt.

    Ich hab ?brigens auf php.net noch gelesen, dass man session_name vor session_start aufrufen sollte (??), von session_id steht nichts. Ich denke jedoch, dass man session_id nach session_start aufrufen sollte, da ja sonst die session-id gar nicht mehr erkannt wird, weil session_start ja mit der neuen ID arbeitet.

    Soweit ich jetzt weiss, muss der Code so aussehen (es funktioniert aber nicht):
    function rand_str($length = 8) {
      // Unwichtig, erzeugt einen zufalls-String mit l?nge $length
    }
    
    $PHP_SELF = basename($_SERVER['PHP_SELF']);
    
    session_name("sessionid_" . rand_str(8));
    session_start();
    session_id( md5(uniqid(rand_str(10),true)) );
    
    define("SESSID_QUERY",session_name() . "=" . session_id());
    define("PHP_SELF_SESSID",basename($_SERVER['PHP_SELF']) . "?" . SESSID_QUERY);
    
    if (!isset($_SESSION['total_calls'])) {
     $_SESSION['total_calls'] = 1;
    } else {
     $_SESSION['total_calls']++;
    }
    
    // ... der Rest hier


    mfg,
    hr
  9. w****n

    Also ich wei? zwar auch nicht, was du mit dem Script bezwecken willst, aber wenn du den Session-Namen und die Session-ID jedesmal ?nders, dann kann ein eingeloggter user nicht mehr erkannt werden. Der Session-Name kann immer Gleich bleiben. Daf?r, dass die Session-ID einzigartig ist, sorgt php von selbst. du musst die Session-id nur weitergeben:

    echo "<a href=\"test.php?".session_name()."=".session_id()."\">Weiter</a>


    session_name() benutze ich eigentlich eher als Abfrage.
  10. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    achso, also kann man nicht den Session-Name ?ndern.
    Aber wie ist das bei der ID? Die wird ja nur ge?ndert, wenn eine neue Session erzeugt wird. Kann man die auch w?rend einer Session ?ndern, oder wird der User dann auch vergessen?
    Noch eine Frage: wie kann man verhindern, dass mit session_start ein Cookie erzeugt wird?

    mfg,
    hr

  11. Hi,

    achso, also kann man nicht den Session-Name ?ndern.


    Doch kann man schon, aber man kann nicht bei jedem Aufruf einen neuen generieren.


    Aber wie ist das bei der ID? Die wird ja nur ge?ndert, wenn eine neue Session erzeugt wird. Kann man die auch w?rend einer Session ?ndern, oder wird der User dann auch vergessen?

    Wenn du in die neue Session dasselbe, wie in der Alten, reinschreibst, dann geht das.


    Noch eine Frage: wie kann man verhindern, dass mit session_start ein Cookie erzeugt wird?

    mfg,
    hr

    Wahrscheinlich per "ini_set ()" oder halt in der php.ini. Ob es per Funktion geht, dass wei? ich nicht.

    MfG Lucas
  12. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    danke f?r die Informationen.
    F?r was n?tzt den session_id()? Die ist doch gerade da, um die SID zu ?ndern, sodass mehr Sicherheit garantiert ist. Daf?r wollte ich es auch benutzen.
    Vielleicht liegt es eben auch daran, wie ich schon sagte, dass man session_id nach session_start aufrufen sollte. Dann sollte es doch funktionieren:
    session_start();
    session_id( md5(uniqid(rand_str(10),true)) );

    Ich probier das gleich mal aus.

    EDIT: Es funktioniert nicht ...

    mfg,
    hr

    Beitrag ge?ndert am 11.02.2006 17:42 von heavyraptor
  13. w****n

    Nein, du hast es nicht richtig verstanden:

    session_start();
    session_id( md5(uniqid(rand_str(10),true)) );

    der Befehl session_start() erzeugt bereits eine Session-ID, die eine ID ist, daher eindeutig und einmalig. Du brauchst dich um nichts zu k?mmern, au?er darum, dass die session-ID weitergegeben wird.
    Das geschieht entweder per URL oder per Cookie.
    Wenn session.use_cookies auf 1 ist, dann wird automatisch ein cookie gesetzt.
    Der Script w?rde wie folgt aussehen.
    ini_set("session.use_cookies = 0"); //Damit [u]kein[/u] cookie gesetzt wird.
    session_start();  //Session wird  gestartet.
    echo "<a href=\"test.php?".session_name()."=".session_id()."\">Weiter</a>  //Session wird per Link weitergegeben.

    Es ist wichtig, dass der Session-Name und die Session-ID weitergegeben wird und am besten nicht ver?ndert wird, da der Server sonst evtl. nicht erkennt, ob es sich um eine Session handelt, oder um eine normale GET-Variable.

    Variablen in Sessions kannst du so abspeichern:
    $_SESSION["varname"]="Inhalt";

    Die Variablen werden dann automatisch mit der Session weitergegeben. Meistens registriert man die User-ID oder den User-Namen in der Session.

    mfg
    webmin

    Beitrag ge?ndert am 11.02.2006 19:07 von webmin
  14. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    danke f?r die Hilfe.
    Jetzt verstehe ich's.

    Noch eine Frage:
    Bei jedem Aufruf von session_start, wird ja gepr?ft, ob ?ber _get, _post oder _cookie eine Session-ID vorhanden ist. Wenn das so ist, dann wird der User ja wieder erkannt. Sonst wird eine neue SID erzeugt.
    Wenn der User aber erkannt wird, dann muss es doch auch eine M?glichkeit geben, um die SID zu ?ndern (das sollte ja mit session_id gehen, aber das ist nicht so, weil's nicht geht)?

    mfg,
    hr
  15. w****n

    heavyraptor schrieb:
    Wenn der User aber erkannt wird, dann muss es doch auch eine M?glichkeit geben, um die SID zu ?ndern (das sollte ja mit session_id gehen, aber das ist nicht so, weil's nicht geht)?

    wozu willst du die session-id ?ndern? Ich habe es so gel?st, dass ich userid, sessionid, ip und timestamp() in eine Datenbank geschrieben hab und die dann jedes mal abfrage und ?berpr?fe, ob die session-id gleich ist.
  16. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    wenn ich eben die SID ?ndere, dann ist das viel sicherer.
    Es gibt z.B. solche spezialisten, die in ein Forum ein link schreiben, mit einer SID. Wenn man aber immer die SID ?ndert, dann w?re es nicht mehr so wahrscheinlich, dass man sich dann mit der SID einloggen kann.

    mfg,
    hr
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!