[PHP] sessies worden niet altijd meegestuurd naar 'popup'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
Hallo allemaal,

ik heb een inlogsysteem dat werkt met sessies, bij het inloggen van een gebruiker gebeurt het volgende:
code:
1
2
3
4
5
<?
session_destroy();
session_start();
session_register('logged');
?>


ik controleer op de volgende manier of een gebruiker ingelogd is:
code:
1
2
3
4
5
6
7
8
9
<?
session_start();

if(!session_is_registered ('logged'))
{
    header("Location: index.php");
    exit;
}
?>


Het script werkt opzich goed bij alle pagina's. Maar soms als een gebruiker ingelogd is en als hij dan een popup opent, dan wordt de popup wel geopend, maar dan gaat de gebruiker binnen de popup terug naar index.php (dat betekend dat de gebruiker 'niet ingelogd' is).

Het rare is dat het meestal wel goed gaat.

Weet iemand waar dit misschien aan kan liggen?

ohja de code die ik gebruik voor het openen van een popup:
code:
1
    window.open(url,'add','location=0, status=0,scrollbars=no, top=25, resizable=0, height='+hoogte+',width='+breedte);


Alvast bedankt,

bartosiej

[ Voor 15% gewijzigd door bartosiej op 18-03-2006 20:45 ]


Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

Dat is een beveiliging in nieuwe versies van Internet Explorer (weet zo niet vanaf welke versie). Ik heb het ook ooit gezien, weet alleen zo gauw niet hoe ik het heb opgelost. Ik zal eens kijken.

Edit:
Ohja, het probleem voor IE is niet op te lossen. Wat ik als oplossing had gebruikt is altijd een url meegeven met een target. Dan moet de gebruiker bij een popup nog wel 1 maal inloggen, maar wordt dan na inloggen direct naar dit target gestuurd.

[ Voor 40% gewijzigd door kingmuze op 18-03-2006 20:56 ]

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Daar heb ik nog nooit problemen met gehad, ook niet met IE. Een sessie geldt trouwens voor het hele domein, dus het zou gewoon moeten werken. Owja, session_register is bejaard zeg maar, je kan beter gebruik maken van de superglobals.

PHP:
1
2
3
4
5
6
7
8
session_start();
$_SESSION['logged'] = true;

if (!isset($_SESSION['logged']))
{
    header('Location: index.php');
    exit;
}

[ Voor 26% gewijzigd door XWB op 18-03-2006 21:15 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Kun je het session-ID niet meegeven aan de popup en daar in de popup gebruik van maken of iets dergelijks ?
Heb het probleem zelf nog nooit gezien eigenlijk, hoewel ik ook weer niks met popups én sessies doe nog, dat scheelt :P

Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

Psychokiller schreef op zaterdag 18 maart 2006 @ 21:15:
Kun je het session-ID niet meegeven aan de popup en daar in de popup gebruik van maken of iets dergelijks ?
Heb het probleem zelf nog nooit gezien eigenlijk, hoewel ik ook weer niks met popups én sessies doe nog, dat scheelt :P
Dat is inderdaad ook een idee. Sessie id meegeven in de URL (url?PHPSESS_ID=... of iets in die geest). Internet Explorer stuurt geen cookies meer mee bij popups vanwege security redenen.

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Heb het even geprobeert hier met een popup en het werkt hier prima.
Had toevallig een PictureOfTheWeek file openstaan die popup naar orginele foto geeft.
Met behulp van $_SESSION['hoi'] = 'woei' in de index.php en print_r( $_SESSION ) krijg ik keurig de sessie te zien in de popup :)

[ Voor 17% gewijzigd door Psychokiller op 18-03-2006 21:20 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Misschien kan je het even proberen met volgende header:

PHP:
1
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');


En anders PHPSESSID maar via de url meegeven, zoals hierboven gezegd.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

Hacku schreef op zaterdag 18 maart 2006 @ 21:20:
Misschien kan je het even proberen met volgende header:

PHP:
1
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');


En anders PHPSESSID maar via de url meegeven, zoals hierboven gezegd.
Wat houd die header in dan?

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

Anoniem: 40602

kingmuze schreef op zaterdag 18 maart 2006 @ 21:22:
[...]


Wat houd die header in dan?
http://www.duxcw.com/faq/webmastr/privhttp.htm

Hier staat er wat over.

http://www.sitepoint.com/article/p3p-cookies-ie6/2

Nog wat...

[ Voor 14% gewijzigd door Anoniem: 40602 op 18-03-2006 21:26 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
kingmuze schreef op zaterdag 18 maart 2006 @ 21:22:
[...]


Wat houd die header in dan?
Die maakt het mogelijk om een cookie te setten zonder iets van IE6 privacy instellingen aan te trekken. Heb die header nooit zelf geprobeerd want ik heb nog nooit problemen gehad met sessies icm pop-ups, maar je kan het altijd even proberen.

En laat session_register ook achterwege ;)

[ Voor 22% gewijzigd door XWB op 18-03-2006 21:27 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
En anders PHPSESSID maar via de url meegeven, zoals hierboven gezegd.
als ik iets heb geleerd is het wel om dat NIET te doen.

Dutchleader gebruikte dat vroeger ook in de popups van hun uitnodigingen, als ik dan uitnodigingen had uitgegeven voor mijn website en mensen die deze dan accepteerde. Dan kon ik via nedstat bekijken waar die gebruikers PRECIES vandaan kwamen. Dan stond er bijvoorbeeld:
www.dutchleader.nl/uitnod...SID=ab99dfjkd39804jdbd398 ofzoiets vaags.

Als ik dan naar www.dutchleader.nl/index.php?PHPSESSID=ab99dfjkd39804jdbd398 ging zat ik gewoon in het account van die gebruiker die mijn uitnodiging had geaccepteerd :P

Niet echt goed beveiligd dus... ;)

Daar ga ik dus zeker niet aan beginnen, want in de popup komen ook allemaal links te staan van sites.

is het verder erg dat ik nog session_register() gebruik, het is toch helemaal niet slecht ofzo?

die phpheader verhelpt mijn probleem ook niet.. :( , ik gebruik ook geen cookies maar sessions dus volgens mij heeft die header niks met mijn probleem te maken

iemand misschien nog andere ideeën?

[ Voor 6% gewijzigd door bartosiej op 18-03-2006 22:10 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
als ik iets heb geleerd is het wel om dat NIET te doen.
Tenzij al je users mooi op uitloggen klikken waarmee de sessie vernietigd wordt :p
is het verder erg dat ik nog session_register() gebruik, het is toch helemaal niet slecht ofzo?
"If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

If register_globals is disabled, only members of the global associative array $_SESSION can be registered as session variables. The restored session variables will only be available in the array $_SESSION.

Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readablity. With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions. Session variables are accessible like any other variables."

http://nl.php.net/manual/en/function.session-register.php

register_globals horen sowieso uit te zijn, dus dat is duidelijk genoeg om geen session_register meer te gebruiken :)

[ Voor 6% gewijzigd door XWB op 18-03-2006 22:23 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 16-06 22:46
bartosiej schreef op zaterdag 18 maart 2006 @ 22:09:
[...]
als ik iets heb geleerd is het wel om dat NIET te doen.

is het verder erg dat ik nog session_register() gebruik, het is toch helemaal niet slecht ofzo?

die phpheader verhelpt mijn probleem ook niet.. :( , ik gebruik ook geen cookies maar sessions dus volgens mij heeft die header niks met mijn probleem te maken
?
Krijg het idee dat je helemaal geen idee hebt wat je doet.

Ja het is erg dat je sesion_register() gebruikt, je kunt het zien als een depricated function. Ja, sessions kunnen ook gebruik maken van cookies. Sessie id's worden of via de URL of via een cookie aangegeven. Het is opzich niet erg om het via de URL mee te geven. Serverside kun je nog allerlei methoden bedenken dat te controleren, op bijvoorbeeld ip + browser. Maar dat is een andere discussie. :)

[ Voor 15% gewijzigd door Sybr_E-N op 18-03-2006 22:34 ]


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
dus jij wilt zeggen dat als de cookies op een computer op disabled staan. (bijvoorbeeld bij mij op school), dat je dan (bijna) nergens kunt inloggen..? en je wilt dus ook zeggen dat als ik op een site ingelogd ben en ik haal met IE mijn cookies leeg dat ik dan niet meer ben ingelogd op de site?

mijn scripts (met session_register()) draaien trouwens wel goed op servers waar register_globals uit staan. Maar wel bedankt voor de tip, Ik ga het meteen overal veranderen ;)

[ Voor 57% gewijzigd door bartosiej op 18-03-2006 23:01 ]


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
kickje

Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
weet niemand dit??

misschien een andere code voor de popup? Want ik hoor veel mensen zeggen dat het op de manier die ik nu gebruik (if(isset($_SESSION['blabla']))) dat ze dan zonder problemen popups kunnen openen.

alvast bedankt,

bartosiej

Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 14:37
bartosiej schreef op zaterdag 18 maart 2006 @ 22:35:
dus jij wilt zeggen dat als de cookies op een computer op disabled staan. (bijvoorbeeld bij mij op school), dat je dan (bijna) nergens kunt inloggen..? en je wilt dus ook zeggen dat als ik op een site ingelogd ben en ik haal met IE mijn cookies leeg dat ik dan niet meer ben ingelogd op de site?

mijn scripts (met session_register()) draaien trouwens wel goed op servers waar register_globals uit staan. Maar wel bedankt voor de tip, Ik ga het meteen overal veranderen ;)
offtopic:
Dat lijkt me nogal wiedes. Als jij je cookies leeggooit en je refresht de pagina waarop je ingelogd bent, wordt er een nieuwe sessie gestart. En die is nog niet ingelogd. Dus ja: als jij je cookies leeggooid wordt je op ongeveer elke site waar je kunt inloggen uitgelogd.

Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 20:02
Serverside kun je nog allerlei methoden bedenken dat te controleren, op bijvoorbeeld ip + browser. Maar dat is een andere discussie. :)
Ik ben het maar op deze manier gaan proberen.
Ik heb de volgende tabel toegevoegd:
code:
1
2
3
4
5
6
CREATE TABLE `logins` (
  `userid` int(10) NOT NULL default '0',
  `ip` varchar(20) NOT NULL default '',
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  `md5` varchar(32) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Bij het inloggen gebeurt het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?
function unique($length = 8, $seeds = '0123456789')
{
    $str = '';
    $seeds_count = strlen($seeds);

    list($usec, $sec) = explode(' ', microtime());
    $seed = (float) $sec + ((float) $usec * 100000);
    mt_srand($seed);

    for ($i = 0; $length > $i; $i++) {
        $str .= $seeds{mt_rand(0, $seeds_count - 1)};
    }

    return $str;
}

$_SESSION['logged'] = true;
$_SESSION["user"] = $list->id;

$date = date("Y-m-d H:i:s");
$unique_code = unique();
$md5_c = md5("$unique_code");
$ip = "$REMOTE_ADDR";

$selectietje = mysql_query("SELECT * FROM logins WHERE userid=".$_SESSION['user']."");

if(mysql_num_rows($selectietje) == 0)
{
    $insert = mysql_query("INSERT INTO logins(userid,datum,ip,md5) VALUES (".$_SESSION['user'].",'$date','$ip','$md5_c')");
}
else
{
    $update = mysql_query("UPDATE logins SET datum='$lastlogin', ip='$ip', md5='$md5_c' WHERE userid=".$_SESSION['user']."");
}

$_SESSION['user_Md5'] = "$md5_c";
?>

De link van het openen van de uitnodigingen:
code:
1
<a href="uitnod.php?sessid=<?=$_SESSION['user_Md5']?>">klik hier</a>

En tot slot, de code in de popup zelf om te checken of de user ingelogd is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$sessid = $_GET['sessid'];
$ip = "$REMOTE_ADDR";

$selectie = mysql_query("SELECT * FROM logins WHERE md5='$sessid' AND ip='$ip'");

if(mysql_num_rows($selectie) == 0)
{
    header("Location: index.php");
    exit;
}
?>

De code voor het checken of de user ingelogd is bij de normale pagina's (dus alle pagina's behalve de popup pagina) heb ik niet verandert, omdat je niet bij een normale pagina kan komen met de waarde van de sessid parameter. Dit leek me dus onnodig.

Kort samengevat werkt het op de volgende manier: Als een user inlogt wordt er een geheime variabele md5 code opgeslagen in de database ook het ip wordt opgeslagen. De md5 code wordt meegegeven in de link naar de popup. Daar wordt een user gezocht die die MD5 code heeft && die hetzelfde ip als de ingelogde user.

Alles werkt in ieder geval wel, maar nu vraag ik me af of het wel veilig is..

Het gaat om een grote site waar ik dit script voor maak, dus daarom moet het wel 100% waterdicht zijn.

Als jullie misschien nog toevoegingen hebben of fouten zien in het script, laat het alsjeblieft horen!

alvast bedankt,

bartosiej
Pagina: 1