Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Session für Dummies [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Session für Dummies


 
otto-mueller
22-02-2004, 14:43 
 
Hallo allerseits,

ich setze mich momentan mit dem Thema "Session" auseinander und verstehe einige Zusammenhänge nicht so richtig. Und hoffe ihr könnt mir es vielleicht in einfachen Beispielen veranschaulichen.

Mein Verständnisproblem liegt darin, daß es nicht in meinem Schädel passt, wie ein Besucher einer Seite wieder erkannt wird und er nicht mit einem anderen Besucher verwechselt wird.

Ich habe dazu hier im Forum einige interessante Posts gelesen unter anderem diesen hier (http://www.php-resource.de/forum/showthread.php?s=&threadid=30318&highlight=session). Dort habe ich versucht folgenden Teil nachzuvollziehen aber irgendwie kappiere ich es nicht:// von Abraxax
<?php
session_start();

// du musst auch erst einmal die werte in die session eintragen.
$_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : '';
$_SESSION['wert2'] = isset($_POST['wert2']) ? $_POST['wert2'] : '';

echo $wert1; // ==> LEER
echo "<p>";
echo $_SESSION['wert1']; // ==> NICHT MEHR LEER
echo "<p>";
echo $wert2; // ==> LEER
echo "<p>";
echo $_SESSION['wert2']; // ==> NICHT MEHR LEER
?>
html>
<head>
</head>
<body>
<form method="POST" action="seite3.php?<?php echo SID; ?>">
<p><input type="text" name="wert3" size="4"></p>
<p><input type="text" name="wert4" size="4"></p>
<input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">
<p><input type="submit" value="Abschicken" name="B1">
</form>
</body>
</html>
Hier wird die Session_id mittels URL weitergereicht, aber es wird doch nirgendwo diese per URL übermittelte session_id wieder eingelesen, sondern es wird wieder mit session_start() angefangen. Nach meinem Verständnis müßte doch die session_id an session_start() übergeben werden etwa so session_start('PHPSESSID'); oder ähnlich, damit der Server weiß aus welcher Session-Datei die Daten zu holen sind :confused: Versteht ihr, was ich meine?
Noch was hier im Code: action="seite3.php?<?php echo SID; ?>". Woher kommt auf einmal SID her? Sollte es nicht 'PHPSESSID' heißen?

Hoffe ihr könnt mich etwas aufklären.

Vielen Dank
Gruß, Otto

 
derHund
22-02-2004, 15:04 
 
hmm,


session_start() erzeugt eine Session (oder nimmt die aktuelle, basierend auf der Session-ID, die über eine GET-Variable oder ein Cookie übermittelt wurde, wieder auf).

php-handbuch

woher das SID kommt, :dontknow:

generell ists aber so, daß du entweder die sid per cookie mitschleifst, oder sie (automatisch) an die url gehängt wird (trans_sid php.ini), in außnahmefällen mußt du sie per hand dranhängen ...

 
Abraxax
22-02-2004, 15:06 
 
Original geschrieben von derHund
woher das SID kommt, :dontknow:das ist eine konstante die i.d.r. automatisch definiert wird. wird sie es nicht, kannst/musst du dies manuell machen. (is_)define(d)() hilft dir dabei.

 
otto-mueller
22-02-2004, 15:23 
 
hallo,

oder nimmt die aktuelle, basierend auf der Session-ID, die über eine GET-Variable oder ein Cookie übermittelt wurde, wieder auf
Wie erkennt denn session_start(), welche Variable in der URL für die Session_id steht? Angenommen ich möchte mehrere Variablen und die Session_id per URL übergeben. etwa so: session_test.php?forum_id=123&user=Otto&meinesession=2e189801094436901f5444f265f59321Woher weiß denn session_start(), daß "meinesession" die Session_id enthält? Oder muß immer der Variablenname von der Session_id "SID" oder "PHPSESSID" heißen, damit die Session_id von Session_start() erkannt wird?

Gruß, Otto

 
derHund
22-02-2004, 15:33 
 
weil du entweder nen namen festlegst, oder sonst der voreingestellte genommen wird? :dontknow: schau doch mal da, wo mein zitat herstammt ...

 
otto-mueller
22-02-2004, 17:31 
 
oder sie (automatisch) an die url gehängt wird (trans_sid php.ini) Ich habe in php.ini folgendes nachgelesen:
; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
; to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
; in publically accessible computer.
; - User may access your site with the same session ID
; always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 0Das ist doch ziemlich übele Sache oder? Man könnte dieses Sicherheitsloch zum Teil stopfen, in dem der Besucher expliziet auf ein "Abmelde-Taste" anklickt und daruf wird die session_destroy() aufgerufen, aber das ist nicht immer der Fall. Manche Benutzer schließen einfach den Browser und das war's ohne sich abzumelden, dabei ist die Session_id in der URL im Verlauf des Browser weiter gespeichert. Bei Cookies sieht es doch nicht besser aus oder? Die session_id bleibt im Cookie weiter erhalten, auch wenn der Browser geschlossen ist.

in außnahmefällen mußt du sie per hand dranhängen ... Hast du dafür ein lebendiges Beispiel?
das ist eine konstante die i.d.r. automatisch definiert wird. wird sie es nicht, kannst/musst du dies manuell machen. (is_)define(d)() hilft dir dabei.
in der php.ini ist session.name = PHPSESSID definiert aber SID ist nicht definiert.
Ich kann doch<form method="POST" action="seite3.php?<?php echo PHPSESSID; ?>">
nehmen da <input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">oder muß es unbediengt SID heißen?
weil du entweder nen namen festlegst, oder sonst der voreingestellte genommen wird?Ich habe es dort nachgelesen und glaube du meinst session.name = PHPSESSID in der php.ini?

Danke
Otto

 
derHund
22-02-2004, 17:43 
 
Die session_id bleibt im Cookie weiter erhalten, auch wenn der Browser geschlossen ist.
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0
; Document expires after n minutes.
session.cache_expire = 180

schau dir mal deine php.ini an, einer dieser werte ist dafür zuständig, :dontknow:, ich setze es afaik in der .php datei driekt, kann aber grad nicht nachschauen ...

Hast du dafür ein lebendiges Beispiel?
function goToLocation($Location = "") {
if ($Location == "" || substr($Location, 0, 1) == "?")
$Location = $_SERVER["PHP_SELF"].$Location;
$Location = explode ("#", $Location);
if (isset($_POST["PHPSESSID"])) {
$Location[0] = (preg_match("/\?/i", $Location[0]))
? $Location[0]."&PHPSESSID=".$_POST["PHPSESSID"]
: $Location[0]."?PHPSESSID=".$_POST["PHPSESSID"];
}
elseif (isset($_GET["PHPSESSID"])) {
$Location[0] = (preg_match("/\?/i", $Location))
? $Location[0]."&PHPSESSID=".$_GET["PHPSESSID"]
: $Location[0]."?PHPSESSID=".$_GET["PHPSESSID"];
}
header ("Location:".implode("#", $Location));
die();
}

ersetzt den

header ("Location: ...

aber nur als beispiel, die funktion ist schon etwas ... *hüstel ... älter. man möge mir die nicht-korrekte angabe im location-header verzeihen ...

Ich kann doch<form method="POST" action="seite3.php?<?php echo PHPSESSID; ?>">
nehmen da
du kannst auch
; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden <input> field with the info which is otherwise appended
; to URLs. If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
url_rewriter.tags = "a=href,area=href,frame=src,input=src"

verwenden ...

 
otto-mueller
22-02-2004, 20:39 
 
Hallo,

die Sache mit "URL rewriter" habe ich nicht so richtig verstanden, aber es ist vielleicht höher als mein Niveau:rolleyes:

Ich habe was anderes probiert und zwar: Ich habe einfach <?php echo SID; ?>
<input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">weggelassen, trotzdem wird die session_id übermittelt. Vielleicht meintest du auch generell ists aber so, daß du entweder die sid per cookie mitschleifst, oder sie (automatisch) an die url gehängt wird (trans_sid php.ini), mit "automatisch" das?

$_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : '';
Kann mir jemand erklären, was hier genau passiert? Ist es eine Art If-Anweisung (hatte irgendwo gelesn, aber ich finde es nicht wieder)? Wenn $_POST['wert1'] gesetzt ist dann registriere wert1 = $_POST['wert1'] oder?
"?" bedeutet If
:'' bedeutet was???

Gruß, OttoAchso, hier habe ich ein anderes Beispiel gefunden:
<?php
if ($var > 5)
{
$answ = $var1;
}
else
{
$answ = $var2;
}
?>
But there is a much shorter way:

<?php
$answ = ( $var > 5 ? $var1 : $var2 );
/* $result = ( $expression ? $return_if_true : $return_if_false ) */
?>
Jetzt weiß ich es wieder :teach:

 
TobiaZ
22-02-2004, 21:09 
 
Ich habe einfach

<?php echo SID; ?>
<input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">
weggelassen, trotzdem wird die session_id übermittelt. logisch, wenn trans_sid an ist!!!

 
otto-mueller
22-02-2004, 21:18 
 
logisch, wenn trans_sid an ist!!!
in meiner php.ini istsession.use_trans_sid = 0 doch deaktiviert oder?

 
otto-mueller
22-02-2004, 21:38 
 
noch mal zu $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : ''; Besser gesagt zu der Schreibweise: kann man in dieser Schreibweise nur den "If-Teil" haben - also ohne den "else-Teil" ? Ich finde diese Schreibweise bei kurzen Bediengungsaufstellungen sehr angenehm. Ich habe es mit $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'];versucht, es kommt immer die Fehlermeldung unexpected ';' ?

 
mrhappiness
23-02-2004, 08:06 
 
Original geschrieben von otto-mueller
Besser gesagt zu der Schreibweise: kann man in dieser Schreibweise nur den "If-Teil" haben - also ohne den "else-Teil" ?nein, du musst etwas angeben, das will dir auch die fehlermeldung sagen ;)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:37 Uhr.