php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Session_id()


 
tudor
02-12-2005, 22:43 
 
Hi,

ich brauche Hilfe !

Problem: session_id() offenbar nicht vorhanden

also:

ich frage auf meiner seite1 die session id des users mit session_id() ab. speiche diese dann in einer mysql-db-spalte.

danach kann er sich frei auf der page bewegen. der inhalt wird immer includiert.

die session id bleibt die gleiche. immer wenn ich sie abfrage stimmt sie noch überein.

das problem ist nun, wenn ich ein formular (für ein gästebuch) includiere und die eingegebenen daten nun an ein script versende, das die daten wiederum in eine gästebuch-db schreibt, kann ich innerhalb dieses scriptes
session_id() offenbar nicht verwenden. es wird statt der bekannten id ein leerer string zurückgeliefert.


meine fragen:

1. ist das normal? ;)
2. wie kann ich das umgehen? ich möchte möglichst weder das script zum eintragen nicht in die gleiche seite die das formular enthält schreiben und auch möglichst nicht
$_SESSION['bananenkuchen'] verwenden. (würde das überhaupt helfen? )

es bedankt sich schonmal

der tudor

 
frank7l7
02-12-2005, 22:53 
 
net vergessen session_start() auf jeder seite, dann ist die frage wie du die sessions übergibts automtisch oder nur per session cookie? dann muss die php.ini richtig konfiguriert siehe url_rewriter.tags. im zweifelsfall nachhelfen und ein hidden input feld machen was die sesssion id übergibt. hoffe das hilft für den anfang - weil deine postings sind überaus mager and script ;)

 
tudor
02-12-2005, 23:55 
 
uhm.. mir dämmert grad was:

ich übergebe die session_id überhaupt nicht. ^^
die session_id war nur auf allen "seiten" verfügbar, weil ich ja im prinzip die ganze zeit nur die index.php aufrufe....

daran könnt es liegen, was?

argh. ich bin offenbar noch vernubter als ich dachte. hab versucht es zu fixen und session_id via hidden input weiter zugeben:

auf meiner g-bucheintragsseite steht dann im form:

<input name="session_id" type="hidden" value="<?php session_id();?>">

soweit richtig?

das script an sich macht dann folgendes:


if($_POST)
{
$session_id = $HTTP_POST_VARS["session_id"];
$abfrage="SELECT login
FROM intern WHERE session LIKE '$session_id'
LIMIT 1";


ich kann garantieren, dass die session id, die zumindest vor dem abschicken des formulars per echo ausgegeben wird die gleiche ist, die in der datenbank intern unter session eingetragen ist...
trotzdem krieg ich genau nix zurück :(

man ich fühl mich voll schlecht weil ich das forum-niveau so runterziehe ;)
trotzdem: hilfe bitte

 
TobiaZ
03-12-2005, 00:04 
 
die session_id war nur auf allen "seiten" verfügbar, weil ich ja im prinzip die ganze zeit nur die index.php aufrufe....

daran könnt es liegen, was? Öhm, nö!

Wenn du die Seite mehrfach aufrufst, checkt das der Server erstmal gar nicht. Somit bleibt auch die ID unter keinen Umständen "auf der Seite" gespeichert.

Auch was du weiterhin schreibst, kann SO nicht stimmen. Ohne Testausgaben wirst du das aber nicht feststellen können.

 
tudor
03-12-2005, 15:20 
 
mir is schon klar, dass die session_id() nirgends gespeichert wird, wenn ich die seite neu aufrufe..

darum bestimme ich sie ja und schreibe sie in das hidden field. (s.o.)
gebe danach die form-daten (inkl. der session id) mit post weiter und hol sie mir im script.

aber da muss ich noch irgendeinen bockmist drin haben...

 
onemorenerd
03-12-2005, 15:24 
 
Ich habe nicht den ganzen Thread gelesen.

Du must die SessionID nicht "persönlich" übergeben, das macht PHP automatisch für dich. Also kein hidden field oder anderer Zauber.

Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt.

Die Unterstützung von Sessions erlaubt Ihnen, eine beliebige Anzahl von Variablen zu registrieren und diese über Anfragen hinweg zu erhalten. Wenn ein Besucher Ihre Website aufruft, überprüft PHP automatisch (falls session.auto_start auf 1 gesetzt ist) oder auf Anfrage (explizit durch session_start() oder implizit durch session_register()), ob mit der Anfrage schon eine bestimmte Session-ID gesendet wurde. Wenn dies der Fall ist, wird die zuvor gespeicherte Umgebung wiederhergestellt.

 
tudor
04-12-2005, 12:38 
 
glaube ich konnte noch nicht ganz deutlich machen wo mein problem ist.
ich versuchs mal anders zu sagen:

der "weg" sieht wiefolgt aus:

---> seite 1 mit form, session id wird abgefrag und in db gespeichert
---> form-daten an ein script, daten werden ausgewertet
---> via (header) zu einer anderen seite

meine fragen sind jetzt:

wie übergebe ich die session_id(), die ich auf seite 1 bestimme am besten an das script, das ich über das form-submit aufrufe?

das problem is ja: wenn ich auf der script seite session_id() schreibe, ohne vorher sesssion_start() zu machen kommt nix. mach ich session_start krieg ich ne andere session id...

also sprich: wie gebe ich die session_id() über ein form weiter?
falls mit hidden field: das hab ich probiert (s.o.): bin wohl zu blöd dafür

danke nochmals..

 
hhcm
04-12-2005, 12:43 
 
Immer noch


<?php
session_start();
echo session_id();
?>
<a href="naechste_seite.php">Seite 2</a>


Auf der 2ten Seite funktioniert ein echo session_id(); nach dem starten der Session auch noch..

 
tudor
04-12-2005, 14:37 
 
eben bei mir nicht !!
ich möchte die session id in dem SCRIPT haben, nicht auf der seite2, die nach der ausführung des scipts aufgerufen wird.

mach ich im script: session_id() kommt ein leerer string zurück.
mach ich n session start in das script krieg ich ne andere session_id... is ja logisch !

frage also: Wie gebe ich die session auch an ein script weiter WENN ICH ÜBER EIN FORM aufrufe, nicht über einen LINK??

ich habs mit hidden_field versucht (bitte s.o.) aber da hab ich noch irgendwo einen fehler, scheinbar.

 
tudor
04-12-2005, 14:45 
 
@ moderator meinen letzten post bitte löschen..
dem war wohl doch nicht so.

mach ich ein start in das script und frage dann die session id geht's...

bin davon ausgegangen, dass eine neue session gestartet wird, sobald ich session start schreibe. dem is aber nicht so.. oder?

naja. mein prob is gefixt, wenn einer mir noch sagen will warum ich in jede datei, in der ich session id abfragen will session start schreiben will ok,
ansonsten.. auch gut ;)

und nochmal DANKE für die nette hilfe

 
DerSchamane1967
07-12-2005, 05:28 
 
Hi Leutz, Hi Tudor,

mir kommt Dein Problem sehr bekannt vor, ich hab gerade das gleiche :cool:

Ich habe das gleiche Problem, mit der Variablen Übergabe in Sessions mittels Session ID.

Ich habe schon sämtliche Beispiele aus den verschiedensten Grundlagen PHP Foren usw. Seiten durchprobiert und komme zu keiner adequaten Lösung. Sessions verweigern einfach Ihren Dienst und machen was sie wollen.

Ähnlich wie bei Dir Tudor, will ich auf Folgeseiten via Session ID in den Scripten die Session Daten weiterverarbeiten (Wie Username, Kundennummer, usw.) , weils mir die "elegantesteste" Lösung erschien.

Auf meinem Server hab ich php 4.4.1 am laufen.

Zuerst hab ichs mit der alten Methode


<?php //S_Test1.php


session_start();
$string = "Test";
$integer = 1;
$array = array("Wert1", "Wert2");
session_register("string", "integer", "array");
.
.
<a href="S_Test2.php">Weiter zu Index2</a>
.
..


<?php // S_Test2.php

//session_start();
?>
<html>
<head>
<title>Beginn</title>
</head>
<body>
<pre>
<?php
print "String: ". $_SESSION['string']."<br />";
print "Integer: ". $_SESSION['integer']."<br />";
print "Array:<br />";
print_r($_SESSION['array']);

// In der Session gespeicherten Wert verändern
$_SESSION['integer']++;

?>
</pre>
<a href="S_Test2.php">Erneut aufrufen</a>
</body>
</html>

Ergebnis dieser Aktion war,:

Notice: Undefined variable: _SESSION in d:\webprojekt\s_test2.php on line 11
usw.

Zudem legt der Server bei mir bei JEDEM session_start(); ein neue Session ID mit dazugehöriger Datei auf dem Server an . (Aufruf der Seite via gleichem Browser und gleicher rechner IP) .

In der einen Sessiondatei stehen die Variablen drinn, in der zweiten Datei (von der Folgeseite erzeugt mit session_start() [warum auch immer er das macht :confused: ] ) steht nüscht.

Session_autostart = 0 (also deaktiviert).

Auch die neue Variante (seit 4.x) mit Superglobal $_SESSION ['Test'] = $Irendwas; versagt ihren Dienst.

Ich vermute, das irgendeine Einstellung in der php.ini daran schuld ist, und nicht das Skript.

Meine php.ini ist grundsätzlich die default Ini mit der einzigen änderung des session_save_path(LWK:\temp);

Ich kann es mir anders nicht mehr erklären warum die Sessions sich weigern Ihren Dienst zu tun. Er legt brav die Session ID's an, aktiviert die Sessions, nur die Variablen werden nicht übergeben.

Ich hatte erst vermutet, das es an dem Frame konstrukt der HP liegt (die ich mit dynamischen Inhalten füllen soll ). Aber selbst einfachste Beispielprogramme funzen nicht. Ich gehe also eher davon davon aus, dass es ein Konfi Problem beim Server ist.

Evtl. ist es bei Dir auch eher etwas in der Richtung Tudor,. Ich habe mir jetzt 3 Nächte mit den Sessions um die Ohren gehauen, und bin zum Ergebnis gekommen, das es nur noch an der php.ini liegen kann. Ich weis mir sonst keinen Rat mehr.

Liebe Grüsse

DerSchamane

 
onemorenerd
07-12-2005, 08:54 
 
Original geschrieben von DerSchamane1967
Ich habe das gleiche Problem, mit der Variablen Übergabe in Sessions mittels Session ID.Das Problem reduziert sich meist auf die Übergabe der Session-ID.
Notice: Undefined variable: _SESSION in d:\webprojekt\s_test2.php on line 11Das kann eigentlich nur am fehlenden session_start() liegen. Im Quellcode oben ist es auskommentiert - das ist schlecht, denn eine Session fällt nicht vom Himmel! Ich glaube es liegt am mißverständlichen Namen der Funktion. Das 'start' heißt nicht, dass PHP eine neue Session startet.
session_start() heißt:
- wenn eine Session-ID übermittelt wurde, dann
- diese Session wieder aufnehmen, Werte in $_SESSION speichern,
- sonst
- neue Session mit neuer Session-ID generieren, $_SESSION ist leer.
Zudem legt der Server bei mir bei JEDEM session_start(); ein neue Session ID mit dazugehöriger Datei auf dem Server an . (Aufruf der Seite via gleichem Browser und gleicher rechner IP) . Lass dir $_GET und $_COOKIE ausgeben - wenn die Session-ID nirgends dabei ist, dann wurde sie nicht übermittelt und PHP muß einen neue Session starten.

In der PHP-Ini steht vor allem auch, wie versucht wird, die SID zu übergeben. Da das bei dir (euch?) nicht geschieht, würde ich da mal ansetzen. Aber ganz allgemein empfielt sich wie immer ein Blick ins Manual (http://php.net/session und http://ffm.junetz.de/members/reeg/DSP/node30.html).


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:36 Uhr.