[php] Dezelfde sessie in meerdere windows

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik zit met het volgende. Ik ben bezig met een script voor het uitprinten van een aantal lijsten met data. Ik wil de printbare versie graag in een apart scherm hebben omdat er soms meerdere verschillende lijsten gemaakt worden.

De basis data wordt doormiddel van een array via $_SESSION doorgegeven aan de nieuwe window. In de nieuw geopende start ik de sessie. Dit blijkt echter de sessie van de hoofdpagina te vernietigen waardoor ik daar opnieuw in moet loggen.
Ik kan genoeg informatie vinden over het normale gebruik van sessies. Echter niet over hoe ik met sessies moet werken op meerdere verschillende paginas's.

Is er een manier om de sessie in de hoofpagina levend te houden. Of moet ik de data op een andere manier doorsturen?

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Ik ken geen php, maar je moet eens duidelijk opschrijven welke (sessie) functions je aanroept bij het werken met twee windows. Misschien doe je iets fout dat de sessie vernietigd. Verder kan je nog in de instellingen kijken of er misschien iets te veranderen is. Met zo'n (handig) kant-en-klaar sessie pakket moet een hoop in te stellen zijn.

Je kan ook zelf je sessie-handling schrijven (dat bij jouw speciale gebruik past -- want met Google vond je niets). Dan kan het zeker, en is het een programmeerklusje voor aspiranten ;)

[ Voor 3% gewijzigd door Sendy op 04-10-2004 21:35 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Heb je misschien een linkje waar we kunnen checken wat er gebeurt en enige relevante stukjes code?

Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 15-09 21:46
Je kunt ook gewoon cookies gebruiken :)
* al heeft natuurlijk niet iedereen die aan staan..

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
KoenieMan schreef op 04 oktober 2004 @ 21:52:
Je kunt ook gewoon cookies gebruiken :)
* al heeft natuurlijk niet iedereen die aan staan..
In de meeste gevallen wordt de sessionid via een koekje doorgegeven ;) Alleen in een uitzonderlijk geval wil je dit via de URLs laten lopen. Dat kan automatisch als je wilt wanneer een user geen cookies accepteerd.

Acties:
  • 0 Henk 'm!

  • Bartoz
  • Registratie: November 2000
  • Niet online
Mmm volgens mij kun je iets met trans_id doen. Weet niet of dit werkt in meerdere windows....

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if (!session_is_registered('count')) {
   session_register('count');
   $count = 1;
} else {
   $count++;
}
?>

<p>
Hello visitor, you have seen this page <?php echo $count; ?> times.
</p>

<p>
To continue, <a href="nextpage.php?<?php echo strip_tags(SID); ?>">click
here</a>.
</p> 

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
De code is eigenlijk heel simpel. Daarom snap ik ook niet waarom het werkt.

Ik gebruik gewoon de standaard manier om een sessie te starten voor de homepage.
PHP:
1
session_start();


Op een bepaald moment kun je een aantal keuze's maken voor wat voor een soort lijsten je wil printen. (Het gaat om verschillende soorten diploma's voor meerdere leden en hoever zijn gevorderd zijn). Hier maak ik een array van met een pagina indeling. Deze array wordt geregisteerd met:
PHP:
1
$_SESSION['print_pagina_info'][$n] = array("CWO" => $temp_string, "BOOT_ID" => "", "NIVEAU"  => $n);

Dit is natuurlijk maar een klein deel van de array. Deze wordt veel verder opgebouwd.

Hierna open in met een on_load een nieuwe window. Hierin open ik dan weer een sessie met session_start();
Hierna is de sessie in de homepage vernietigd.

Als ik de sessio_start() niet gebruik blijft de sessie wel netjes behouden maar kan ik de variabele niet gebruiken in de nieuwe window.

@Bartoz
Ik heb het ook gedaan met
PHP:
1
2
session_id($_GET['PHPSESSID']);
session_start();

maar dit geeft hetzelfde resultaat.

[ Voor 12% gewijzigd door J_Davelaar op 04-10-2004 22:12 ]

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Je bent juist met je laatste opmerking: Je moet natuurlijk niet session_start() doen. Dat maakt duidelijk een nieuwe sessie aan (en vernietigt je oude). Bekijk eens goed waarom je de variabele niet kan bekijken. Gaat het mis met de cookies? Bijvoorbeeld dat je nieuwe window de verse cookie niet meestuurt?
edit:

Dit kan inderdaad prima onzin zijn. Ik lees het inderdaad op php.net:

session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.

Dan weet ik 't ook niet meer :'(

[ Voor 32% gewijzigd door Sendy op 04-10-2004 22:27 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Je bent juist met je laatste opmerking: Je moet natuurlijk niet session_start() doen.
Onzin, session start dient op elke PHP pagina te staan welke gebruik wil maken van de huidige sessie. Doe je dit niet werken de sessie gegevens danook niet.

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Kijk nog makkelijker is het gewoon geen gebruik te maken van de sessies. Maar dan moet ik die array nog wel doorgeven. En hij is te groot om in de URL te plakken (en te complex geloof ik)

Oke ik bedoelde dus niet via de client.
Het mooist is natuurlijk gewoon via de sessie. Maar ik zou eigenlijk geen andere manier weten om het serverside door te geven.

[ Voor 32% gewijzigd door J_Davelaar op 04-10-2004 22:35 ]

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
edit:
Sorry, was een simpele flame.

[ Voor 94% gewijzigd door Sendy op 04-10-2004 22:35 ]


Acties:
  • 0 Henk 'm!

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 21-09 16:37

Basszje

Reisvaap!]

Wat bedoel je precies met nieuwe vensters ? Is dat een javascript met een open statement of iets dergelijks of echt een nieuwe start van de browser?

In het eerste geval zou het idd gewoon moeten werken, in het tweede geval is het vager. open je een nieuw scherm bv in IE dan doe je met CTRL-N ( nieuw venster ) wat anders dan met opnieuw op het icoon rammen. In het eerste geval zit je in dezelfde versie, in het tweede geval in een nieuwe sessie.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Acties:
  • 0 Henk 'm!

Verwijderd

Die session_id() functie zou ik weglaten:
Note: When using session cookies, specifying an id for session_id() will always send a new cookie when session_start() is called, regardless if the current session id is identical to the one being set.
Wat ik me afvraag; wordt er data uitgeprint die uniek is voor de sessie van de ingelogde gebruiker?
Zo niet dan kan je gewoon de arrays opnieuw genereren in de 'popup' pagina. Heb je die sessies ook niet meer nodig.

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik open een nieuw scherm met een java scriptje in de <body> tag met een onload. (Alleen die ene keer dus) Hier werkt idd een sessie_start blijkbaar niet.

De data is in zoverre afhankelijk van de sessie dat niet iedere gebruiker zo'n lijst mag maken. Alleen de beheerders van de diploma's mogen die maken. Daarom maak ik eerst in de hoofdpagina de pagina indelingen waarna ik deze doorstuur naar de popup.

Is er een andere manier dan om zeer uitgebreide data te versturen naar een popup?

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 11-12-2024

blizt

Wannabe-geek

Als je 'n array in 'n sessie wilt doorgeven moet je toch serialize() en unserialize() gebruiken?

United we stand, and divided we fall


Acties:
  • 0 Henk 'm!

Verwijderd

Ja dan moet je inderdaad serialize gebruiken, wat misschien handiger is om dit met een class te doen defineer alle waardes die je wil gebruiken in de class en gooi die over tussen de pagina's.

Maar voor nu:
code:
1
2
3
4
session_start();
/* registreer je sessie variabelen*/

$sess=serialize($_SESSION);

post de data naar de nieuwe pagina
------------------------
code:
1
2
session_start();
$sess=unserialize($_POST[sess]);

je kan hierna twee dingen doen. of de variabelen gebruiken.
code:
1
$sess[naam] $sess[1] etc etc ....

of ze weer terug plaatsen in de sessie hoe dat precies gaat weet ik niet dus dat moet je zelf ff uitvogelen .

[ Voor 5% gewijzigd door Verwijderd op 05-10-2004 12:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

blizt schreef op 05 oktober 2004 @ 08:20:
Als je 'n array in 'n sessie wilt doorgeven moet je toch serialize() en unserialize() gebruiken?
Eh?

Nee hoor. Het is wel zo dat alle waardes in de $_SESSION array automatisch door PHP geserialized worden bij het beëindigen van het script, en geunserialized worden bij het aanroepen bij het aanroepen van session_start().

Acties:
  • 0 Henk 'm!

  • KurtDB
  • Registratie: Juni 2004
  • Laatst online: 13-09 11:55
Een mogelijke oplossing hiervoor is een eigen session handler schrijven (met flat-files of een rdbms). Hierbij kan je het IP wel blijven tracken indien je dat opslaat. Dit systeem is echter niet waterdicht, aangezien je op public pc's (bibliotheken, schoolnetwerken, etc) meestal met eenzelfde ip zit. (datgene dat de backbone/gateway naar buiten toe heeft)

Je kan altijd risico nemen en 't met cookies implementeren, maar dan heb je niet de zekerheid dat 't ook gaat werken. (ofwel je object/sessie-info in php/js serializen en meegeven aan de querystring, maar dan krijg je nogal 'n lelijke url)

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik ben nu even mijn site aan het testen in IE 6.0. Hier blijkt het probleem niet op te treden. Het probleem treed dus alleen op in FF1.0.
Stom dat ik het niet eerder heb geprobeerd maar ik gebruik nooit meer IE... Test er alleen nog maar in.

Kan dit iets met cookie instellingen te maken hebben??

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Probeer de SID eens in de url mee te geven.

code:
1
2
$sessie = Session_Name().'='.Session_ID();
link.php?<? echo $sessie; ?>

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Zoals iets verder terug te zien was heb ik het geprobeerd met een session id. Deze heb ik er echter weer uit gehaald. Zonder werk het wel in IE. En voor FF werkt het gewoon nooit.

Het heeft dus volgens mij iets met het openen van een nieuwe window te maken. Is het mogelijk met een knop op een andere manier een window te openen dan met Javascript?

Was ik maar een punt dan was ik het einde


Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
index.php
code:
1
2
3
4
5
6
7
8
<? session_start(); $_SESSION['test'] = 'test'; ?>
Sessie identiteit: <?= session_id() ?>
<br />
<?= isset($_SESSION['test'])? '':'test mislukt' ?>
<br />
<a target="_blank" href="link.php?PHPSESSID=<?= session_id() ?>">Klik eerst hier op een nieuw venster te openen.</a>
<br />
<a href="index.php">Klik dan hier om deze pagina opnieuw te openen om te kijken of het nog steeds dezelfde sessie beteft.</a>

link.php
code:
1
2
3
4
<? session_start(); ?>
Sessie identiteit: <?= session_id() ?>
<br />
<?= isset($_SESSION['test'])? '':'test mislukt' ?>

Dat heb ik dus geprobeerd, en ik heb nergens "test mislukt" gezien.
Dus het werkt B)
offtopic:
Dit bericht maar 255% gewijzigd ?? Echt niet ! Veeeel meer !! :9~ // Maar nu komt het wat duidelijker over :P. // Je kunt in ieder geval niet zeggen dat ik niet bekend ben met de "edit"-knop :+

[ Voor 255% gewijzigd door sjhgvr op 06-10-2004 23:52 ]

oisd.nl


Acties:
  • 0 Henk 'm!

  • KurtDB
  • Registratie: Juni 2004
  • Laatst online: 13-09 11:55
Off-topic: Probeer trouwens ook met <?php ?> ipv <? ?> te werken, aangezien short-tags op sommige servers op disabled staat. (en 't een duidelijkere scheiding is met de xml-declaratie (<?xml ?>))

Acties:
  • 0 Henk 'm!

  • J_Davelaar
  • Registratie: Maart 2001
  • Laatst online: 19-03 13:31
Ik snap het nu helemaal niet meer. |:( 8)7
Maar dit is wat ik zelf alweer gevonden heb.

Ik heb de site ondertussen af en op de juiste plaats gezet met het idee van het werkt iig in IE en de functie wordt door een beperkte groep mensen gebruikt.

Nu blijkt het ook in FF1.0 ineens wel te werken.
Het enige verschil dat ik heb kunnen vinden is dat ik in de testfase de hoofdpagina in een tab in FF had draaien. In de uiteindelijke versie wordt ook de hoofdpagina in een pop-up geopend.
1. Wanneer dus vanuit een pop-up een nieuwe pop-up wordt aangeroepen wordt de sessie wel voorgezet. :)
2. Wanneer je vanuit een tab in FF een pop-up opent wordt de oude sessie blijkbaar overschreven. :?

Dit alles werkte trouwens ook niet als ik de oude sessie id meegaf. Dan start hij namelijk een nieuwe sessie met een oude naam.

Als iemand nog enig idee heeft hoe dit komt zou het wel een mooie afsluiting van het topic zijn.

PS
Ik werk al met de <?php ?> tag enzo. Probeer de pagina verder ook zoveel mogelijk strict xhtml te krijgen. Ben het alleen nog aan het leren. :+

offtopic:
[qoute]offtopic:
Dit bericht maar 255% gewijzigd ?? Echt niet ! Veeeel meer !! // Maar nu komt het wat duidelijker over . // Je kunt in ieder geval niet zeggen dat ik niet bekend ben met de "edit"-knop [/qoute]

Je kunt nog een keer wijzigin naar PHP inplaats van algemene code.

[ Voor 21% gewijzigd door J_Davelaar op 08-10-2004 00:16 ]

Was ik maar een punt dan was ik het einde

Pagina: 1