Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Problem mit session

Servus,

Vorneweg: Ich habe schon lange im Forum gesucht und nix gefunden...

Wie gesagt habe ich ein Problem mit einer Session.
Ich erfasse auf der ersten Seite Daten (Code:)

Code:                   In Zwischenablage kopieren (nur IE)
1">

Über submit wird dann eine zweite Seite aufgrufen:

Code:                   In Zwischenablage kopieren (nur IE)
2">

Die Variablenübernahme hatte ich zunächst über variable=$_POST[$variable] gelöst, dann aber doch import_request_variables("P","") verwendet. Der Savepath wird über php.ini festgelegt.

Auf dieser Seite werden auch alle Infos angezeigt und in der Sessiondatei sind sie auch drin!

Über einen submit sollen die Daten abgespeichert werden (oder auch nicht).
Code der Speicherseite:
Code:                   In Zwischenablage kopieren (nur IE)
3">

Die echo's sind da zu Testzwecken. Es wird nämlich nie was abgespeichert, weil in den Variablen nix mehr drin ist!
(Ich hatte davor das Problem mit der Umstellung von var_globals=off. Das sollte ja jetzt gehen oder?

mfg
Spiff
Hier gehts zum Orginal Eintrag "Problem mit session" im Forum

Antworten

$_SESSION[$kundenname1];
Nein, das sollte nicht gehen. $_SESSION["kundenname"];


2.

Zitat:
Oliver Albers postete
$_SESSION[$kundenname1];
Nein, das sollte nicht gehen. $_SESSION["kundenname"];
OK, ich habs jetzt geändert. Leider wird immer noch nix angezeigt.
Sobald ich den ersten submit drücke wird die Session-Datei erzeigt und es steht auch alles drin, was ich eingegeben habe. Wieso sind die Daten dann auf der nächsten Seite futsch???

Das print_r($_session, true); sollte doch auch eine Ausgabe bringen, oder?

Kann es an php.ini-Einstellungen liegen?
(Ich glaube z.B. session.auto_start is "1").

mfg
Spiff


3.

Weil du immernoch kein session_start() in der zweiten Datei hast.


4.

Zitat:
Oliver Albers postete
Weil du immernoch kein session_start() in der zweiten Datei hast.
Hab ich doch:

Code:                   In Zwischenablage kopieren (nur IE)
4">

(ist aber auch leicht zu übersehen)

Wird ohne session_start() überhaupt was in die session-datei geschrieben?

mfg
Spiff


5.

Die zweite Datei (aus Session-SIcht) ist für mich die mit der Ausgabe - und da ist keines zu entdecken.


6.

Zitat:
Oliver Albers postete
Die zweite Datei (aus Session-SIcht) ist für mich die mit der Ausgabe - und da ist keines zu entdecken.
Hier:

Code:                   In Zwischenablage kopieren (nur IE)
5">

mfg
Spiff


7.

Hallo nochmal,

also ich hab noch ein bisschen nachgeforscht.

Wenn ich die erste Seite mit Session aufrufe, wird eine Sessiondatei erzeugt, mit den eingegebenen Werten. Auf dieser Seite werden dann noch Seriennummern eingegeben (Anzahl hängt von den vorigen Eingaben ab). Wenn ich dann auf submit drücke, werden Alle Daten (von voriger Seite + Seriennummern) in einer Datenbank abgespeichert. Komischerweise wird dann noch eine zweite Sessiondatei erzeugt in der dann auf einmal nix mehr steht!!!
Warum wird die zweite Session-datei erzeugt? Warum ist die leer?

mfg
Spiff
PS: Wenn in der php.ini session.auto_start aktiviert ist, braucht man kein session_start().


8.

session_start() gehört an den Anfang der Datei(en).

Wie übergibst du die Session-ID??


9.

Zitat:
webler postete
session_start() gehört an den Anfang der Datei(en).

Wie übergibst du die Session-ID??
Wegen Session_start(): Ich hätte gedacht (im Internet gelesen), daß wen session.auto_start eingeschaltet ist, man session_start() nicht benötigt. Wird implizit über $_SESSION gemacht. Korrigiert mich, falls das Käse ist!

Um die Session-ID hab ich mich irgendwie noch garnicht gekümmert. Habe aber schon gelesen, das man die über ein Hidden-Feld bzw. die URL übergeben kann.
Wahrscheinlich haben meine Seiten früher nur deswegen funktioniert, weil unter PHP4 var_globals auf ON war. (Ich hätte mir also das ganze Session-Zeug sparen können - damals).

mfg
Spiff


10.

versuch doch mal, die Session-ID in den Dateien auszugeben, um zu sehen was passiert.


11.

Zitat:
webler postete
versuch doch mal, die Session-ID in den Dateien auszugeben, um zu sehen was passiert.
Also wenn ich im Code schreibe:
Code:                   In Zwischenablage kopieren (nur IE)
6">

wird in das session-file die id mit reingeschrieben. Bei der zweiten Session-datei steht nach wie vor nix drin..?!?!?

mfg
Spiff


12.

Kann man das selbst irgendwo testen?


13.

Zitat:
webler postete
Kann man das selbst irgendwo testen?
ich kann es schon testen (Intranet). Wer soll/will es sonst noch testen?

Soll ich die sid jetzt mit übergeben? Wenn ja, wie?

mfg
Spiff


14.

Mal versucht die Session ID in der URL mitzugeben. Normalerweise dürfte es nicht sei das wenn er ein und die selbe Session nutzen soll er zwei verschiedene Session Dateien anlegt. Außer du gibst es explizit an. (beispielsweise mit session_regenerate_id () )

selbst wenn du nichs nichts angibst sollte es funktionieren. hast du schon ein mal probiert vielleicht irgend eine andere php mit sessions zu nutzen vielleicht ist es bei dir ein einstellungsproblem

first.page.php
Code:                   In Zwischenablage kopieren (nur IE)
7">

next.page.php
Code:                   In Zwischenablage kopieren (nur IE)
8">




15.

@sToRkka
Habe das Beispeil mal laufen lassen. Die ausabe ist einfach:

Array()

Sonst nix

bei mir habe ich ja sonst $_SESSION["daten"]=$daten; geschrieben (in $daten steht schon was drin! Ich meine nur wegen " oder ' ...). Sollte ja kein Problem sein.

mfg Spiff


16.

dann stimmt was mit deinen einstellungen nicht, ich hab das bei mir laufen lassen und auch die dementsprechende ausgabe bekommen.

Code:                   In Zwischenablage kopieren (nur IE)
9">

Nimm mal das session.auto_start = 0 anstatt deines (wenn ich das richtig verstanden habe) session.auto_start = 1, weil du startest durch das autostart eine session und machst selbst noch eine auf, dann is klar das da irgendwas verloren geht!


17.

[quote]sToRkka postete
dann stimmt was mit deinen einstellungen nicht, ich hab das bei mir laufen lassen und auch die dementsprechende ausgabe bekommen.

Code:                   In Zwischenablage kopieren (nur IE)
10">

Nimm mal das session.auto_start = 0 anstatt deines (wenn ich das richtig verstanden habe) session.auto_start = 1, weil du startest durch das autostart eine session und machst selbst noch eine auf, dann is klar das da irgendwas verloren geht![/quote] Also, sobald ich die erste Seite von dem Beispiel aufrufe wird eine Session-Datei erzeugt, in der "daten|s:9:"irgendwas";" drinsteht.
Sobald ich auf den Link klicke wird eine zweite Session-Datei erzeugt, die leer ist. Deswegen wird dann auch nix angezeigt.
Ich kann mir nur vorstellen, das es an den Einstellungen der php.ini liegt. Unter Session ist folgendes eingetragen:
Code:                   In Zwischenablage kopieren (nur IE)
11">

Evtl. seht ihr ja noch eine falsche Einstellung.

register_global=off

mfg
Spiff


18.

Servus,

ich habe noch ein bißchen rumgespielt und bin dem Problem glaub ich auf der Spur.
An den Einstellungen in der php.ini liegt's höchstwahrscheinlich nicht!!!

Ich habe ja obiges Beispiel gestestet und es lief nicht.
Code:                   In Zwischenablage kopieren (nur IE)
12">

Wenn ich aber anstatt
Code:                   In Zwischenablage kopieren (nur IE)
13">

das hier schreibe
Code:                   In Zwischenablage kopieren (nur IE)
14">

funktioniert es!!! (Man beachte das an die URL anghängte [color="red"]?<?=SID?[/color])

Jetzt muß ich nur noch wissen, wie ich denselben Mechanismus (SID übergeben) mit Formularen mache. Da schreibe ich ja sowas wie:
Code:                   In Zwischenablage kopieren (nur IE)
15">

Habe im Internet gelesen, das man dann ein Hidden-Feld anlegen soll:
Code:                   In Zwischenablage kopieren (nur IE)
16">

Meine Frage ist dann aber, wie ich das Hiddenfeld in der nächsten Seite richtig auswerten kann?

mfg
Spiff


19.

Servus,
Problem gelöst!!!!

Folgendermaßen klappts jetzt:

1. Seite
session_destroy(); Evtl. vorhandene Session löschen
Nur eingaben über Formular -> submit

2. Seite
Code:                   In Zwischenablage kopieren (nur IE)
17">

import_request_variables("P",""); So holt man sich die $_POST-Variablen (es geht auch per $var=$_POST["var"])
session_start() muß ja sowieso sein
$sess=session_id(); speichert die Session_ID in $sess
$_SESSION["kundenname1"] = $kundenname1; Registrieren der Variablen für die Session
<input type="hidden" name="<?php echo session_name();?>" value="<?php echo $sess; ?>"> Dieses hidden-feld überträgt die Session-ID zur nächsten Seite

3. Seite
Variablen aus der Session holen und in DB abspeichern
Code:                   In Zwischenablage kopieren (nur IE)
18">

session_start($sessId) startet die gespeicherte Session
$kundenname1 = $_SESSION["kundenname1"]; Variablenwerte aus der Session holen
unset($kundenname1); Am Ende Variablen rücksetzen

Das Problem war hauptsächlich die Session-ID zur nächsten Seite zu bekommen (Geht bei Formular und GET über die URL)

mfg
Spiff

Und Danke für eure Tipps


20.

Und es liegt doch an der PHP-Konfiguration

session.use_cookies = 0

zwingt dich dazu die Session-ID permanent per Formular oder URL weiterzugeben
Abgesehen davob dass es mühsam ist birgt es auch einige Sicherheitslücken da
die ggf. im Referrer auf einer anderen Seite auftauchen könnte.

Bei mir sieht das so aus (Beispiel Testserver auf Windows) und da muss ich mich rein um gar nichts kümmern, @session_start() am Beginn und das wars -> Empfehle den Klammeraffen sonst mault ein Server mit session_auto_start :-)

[Session]
session.save_path = "e:/sessiondata"
session.save_handler = "files"
session.use_cookies = On
session.use_only_cookies = On
session.name = "PHPSESSID"
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = "/"
session.serialize_handler = "php"
session.gc_probability = 1
session.gc_divisor = 10
session.gc_maxlifetime = 1440
session.entropy_length = 32
session.cache_limiter = "nocache"
session.cache_expire = 360
session.use_trans_sid = 0
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = ""


Zitat:
Das Problem war hauptsächlich die Session-ID zur nächsten Seite zu bekommen (Geht bei Formular und GET über die URL)

mfg
Spiff

Und Danke für eure Tipps



Hier gehts zum Orginal Eintrag "Problem mit session" im Forum
 
phpforum.de | Impressum | Handy Bundles