[PHP] Sessions met URL behalve wanneer er een cookie is

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met PHP sessions en mijn idee was om session ID's in de URL mee te geven, zodat gebruikers geen cookies hoeven te accepteren. Wanneer de gebruiker echter inlogt wou ik de session ID wel in een cookie gaan opslaan voor de extra veiligheid.

Mijn vraag is eigenlijk of dit zomaar kan, en hoe ik kan testen of een session id uit de cookie is gevonden of uit de url (en welke wordt gebruik als zowel via de url als via een cookie de session id wordt aangegeven).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Sessies worden standaard in de URL gestopt als cookies uit staan bij bezoekers wanneer session.use_trans_sid op 1 staat in php.ini.
session.use_trans_sid

session.use_trans_sid whether transparent sid support is enabled or not. Defaults to 0 (disabled).

Note: For PHP 4.1.2 or less, it is enabled by compiling with --enable-trans-sid. From PHP 4.2.0, trans-sid feature is always compiled.

URL based session management has additional security risks compared to cookie based session management. Users may send a URL that contains an active session ID to their friends by email or users may save a URL that contains a session ID to their bookmarks and access your site with the same session ID always, for example.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Wat je zou kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * Is the current sessionid stored in a cookie or in the URL?
 *
 * @access public global
 * @return bool
 * @author Pieter Nobels <pieter@opengate.be>
 */
function IsSessionInCookie() {
    // Does the cookie exist and does it match the Session ID?
    if (isset($_COOKIE[ini_get('session.name')]) && $_COOKIE[ini_get('session.name')] == session_id()) {
        return true;
    }
    else {
        return false;
    }
}

Mij lijkt een betere oplossing trouwens gewoon bij de initialisatie van de session het IP opslaan in de sessie, en dan bij elke request met session controleren of het IP van de gebruiker overeen komt met het IP in de sessie.
PHP:
1
2
3
4
5
6
7
session_start();
if (!isset($_SESSION['ip'])) {
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
else if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
    session_destroy();
}

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik was inderdaad al van plan om te checken op ip en wellicht ook nog meer zoals browser. Ik heb een eigen session handler gemaakt die de sessions in mysql opslaat dus dat kan ik dan makkelijk hieraan toevoegen als het goed is.

Ik heb nog eens vraagje: was het niet mogelijk om in php de url variabelen te verbergen, waaronder de session zodat bijvoorbeeld altijd www.bla.com zichtbaar is in de adresbalk en niet de volle www.bla.com/index.php?bla=test&session=vanalles etc?

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Verwijderd schreef op maandag 24 oktober 2005 @ 15:44:
Ik heb nog eens vraagje: was het niet mogelijk om in php de url variabelen te verbergen, waaronder de session zodat bijvoorbeeld altijd www.bla.com zichtbaar is in de adresbalk en niet de volle www.bla.com/index.php?bla=test&session=vanalles etc?
Dit is alleen mogelijk als je de pagina www.bla.com/index.php?bla=test&session=vanalles in een (i)frame zet.

If I can't fix it, it ain't broken.