Sessie te sloom voor page refresh?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Feiko Ritsema

Feiko Ritsema

16/06/2015 16:08:24
Quote Anchor link
Hallo PHP'ers,

Ik heb een php applicatie gemaakt, maar wil deze uiteraard ook beveiligen.

Mijn beveiliging bestaat uit:

- Ten eerste een IP Check. Als je op een bepaald ip adres zit is inloggen niet nodig.
- Als je niet op dit IP adres zit, wordt je dooorverwezen naar login.php
- Als je correct inlogt, wordt je sessie gestart en wordt je doorverwezen naar index.php

Mijn probleem: Als je dus buiten het onbeveiligde IP adres zit, en wil inloggen, kom je prima op de login pagina, maar, als je klikt op inloggen, is de session start blijkbaar te sloom voor de page refresh?

Is het echt zo dat een session aanmaken zo sloom is of zit er een fout in mijn pagina?
En hoe kan ik dit eventueel oplossen?

Groetjes Feiko

P.S. Hieronder bijgevoegd gedeeltelijk de code van iptest.php en login.php.

login.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<? if ($naaminputc==$naamdbc) {    

    mysqli_query($con,"INSERT INTO Logins (naam, login_id, ip, date, correct) VALUES ('$naaminputc', '$code', '$clientip', '$datum', 'ja')");
            $_SESSION['luser'] = $naaminputc;
            $_SESSION['start'] = time();
            $_SESSION['expire'] = $_SESSION['start'] + (30 * 60);
            header('Location: http://xxxxxx.nl/index.php');
        
        }
?>


iptest.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? $clientip = $_SERVER['REMOTE_ADDR'];
if($clientip !='xx.xx.x.xxx'){


    $now = time();

   session_start();

    if (!isset($_SESSION['luser'])) {
      header('Location: http://www.xxxxxxx/login.php');
  }


       elseif ($now > $_SESSION['expire']){
           session_destroy();
           header('Location: http://www.xxxxxx/login.php');
       }

        else {}


}
?>


Toevoeging op 16/06/2015 16:11:35:

Comment: Ik heb het ook geprobeerd met de HTML Refresh (<META HTTP-EQUIV="refresh" CONTENT="5; URL=http://www.xxxxxx.nl/index.php">)

En bij 5 seconden werkte het op de pc, maar op een smartphone nog niet. Verder is dit een ontzettend irritante manier, omdat je bij een login lang moet wachten, en gebruikers dan geirriteerd raken en het nog een keer proberen etc.

Dus als iemand een andere oplossing heeft, zou fantastisch zijn.
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 16/06/2015 17:02:39 door Feiko Ritsema
 
PHP hulp

PHP hulp

27/04/2024 05:44:12
 
Ozzie PHP

Ozzie PHP

16/06/2015 16:15:19
Quote Anchor link
Even algemeen ... gebruik eens duidelijke namen: "naaminputc", "naamdbc", "code", "luser". Nederlands en Engels door elkaar en veel te vaag.

>> is de session start blijkbaar te sloom voor de page refresh?

Waarom denk je dat? Wat gebeurt er dan?
 
Feiko Ritsema

Feiko Ritsema

16/06/2015 16:19:05
Quote Anchor link
Ozzie PHP op 16/06/2015 16:15:19:
Even algemeen ... gebruik eens duidelijke namen: "naaminputc", "naamdbc", "code", "luser". Nederlands en Engels door elkaar en veel te vaag.

>> is de session start blijkbaar te sloom voor de page refresh?

Waarom denk je dat? Wat gebeurt er dan?


Mee eens, het is allemaal niet super netjes, maar is voor de werking verder niet van belang.

Als iemand correct inlogt wordt hij doorverwezen naar index.php, waar de iptest.php wordt ge'include. Dan vervolgens wordt de gebruiker gelijk weer doorverwezen naar login.php..

Daarom lijkt het alsof de sessie te sloom is voor de refresh, of zit ik hier fout mee?
 
Ozzie PHP

Ozzie PHP

16/06/2015 16:27:53
Quote Anchor link
>> Mee eens, het is allemaal niet super netjes, maar is voor de werking verder niet van belang.

Dat is redelijk nonsens ;) Als je het doet, doe het dan gelijk goed. Als je deze code over 2 maanden terugleest dan heb je geen flauw idee meer hoe die in elkaar steekt. Goede code leest als een boek, jouw code leest als een puzzel.

Je hele code deugt (met alle respect) niet heel veel van.

Zit in login.php wel een session_start()? Die mis ik namelijk.
 
- SanThe -

- SanThe -

16/06/2015 16:43:12
Quote Anchor link
In de else gebruik je $_SESSION['expire'] maar daar is geen session_start(). Dus $_SESSION['expire'] is leeg (0). Dat houdt in dat $now dus altijd groter is dan $_SESSION['expire'] en ga je naar login.php.

Session_start() hoort op regel 1 te staan.
 
Feiko Ritsema

Feiko Ritsema

16/06/2015 17:31:45
Quote Anchor link
Beide bedankt voor de opmerkingen, maar dat is het allebei helaas niet..

Het punt is namelijk dat je alleen de 1e keer terug wordt verwezen naar login.php , als je vervolgens handmatig naar de index.php pagina gaat wordt je niet terug verwezen, dus zijn de sessions wel goed ingesteld.

Daarom dacht ik dat de eerste keer misschien te snel wordt doorverwezen, of mijn server simpelweg te sloom is?
 
Ozzie PHP

Ozzie PHP

16/06/2015 17:43:56
Quote Anchor link
Waar is je session_start() in login.php?
 
Feiko Ritsema

Feiko Ritsema

16/06/2015 17:51:04
Quote Anchor link
Helemaal boven aan de pagina, nog voordat er verbinding met de database wordt gemaakt.

Toevoeging op 16/06/2015 17:57:39:

Ik heb er nu een vertraging van 5 seconden in zitten, en hij werkt wel.

Maar toch vind ik dit maar een tijdelijke oplossing omdat het gewoon niet ideaal is wat mij betreft.
 
Thomas van den Heuvel

Thomas van den Heuvel

16/06/2015 20:01:53
Quote Anchor link
My God, we have another one.

Beschouw de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ($security_check_die_faalt) {
    header('Location: shoo.php');
}

// "AFGESCHERMDE" CODE
// ...

?>

Omdat je geen exit; na je header('Location: ...') zet gebeurt er het volgende:
- de "AFGESCHERMDE" CODE wordt gewoon uitgevoerd
- je wordt na afloop geredirect

Sessies zijn normaal niet traag. Gebruik je (heavens forbid) framesets? Strooi anders eens wat session_write_close()s in je code en kijk of dat wat uitmaakt.

En anders zou ik je eigen code eens serieus onder de loep nemen, want dit klinkt niet echt normaal.
 
Johan K

Johan K

16/06/2015 22:49:17
Quote Anchor link
Thomas heeft zeker gelijk;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
  header(...);
  die();
?>


Maaaar.. ik wilde eigenlijk zeggen met jouw beveiliging van IP.. is een beetje achterhaalt.
Tegenwoordig zit je in de trein met je mobieltje en je kan wel tig keer van IP veranderen, plus thuis 3g en wifi pakt je telefoon automatisch de "beste" verbinding. Dus als je dit doet, zorg wel dat je je sessie en je beveiliging niet zoveel laat beïnvloeden door een IP.
 
Randy vsf

Randy vsf

17/06/2015 12:24:21
Quote Anchor link
Johan K op 16/06/2015 22:49:17:
Thomas heeft zeker gelijk;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
  header(...);
  die();
?>


Maaaar.. ik wilde eigenlijk zeggen met jouw beveiliging van IP.. is een beetje achterhaalt.
Tegenwoordig zit je in de trein met je mobieltje en je kan wel tig keer van IP veranderen, plus thuis 3g en wifi pakt je telefoon automatisch de "beste" verbinding. Dus als je dit doet, zorg wel dat je je sessie en je beveiliging niet zoveel laat beïnvloeden door een IP.


Wat dacht je van school, bedrijfs of open netwerken.
Als er 1 persoon inlogt, is het hele netwerk ingelogd op dat account.
 
Feiko Ritsema

Feiko Ritsema

18/06/2015 10:20:39
Quote Anchor link
@Johan K & Randy Flujowa: Zover ik weet zijn sessions uniek en gelden deze niet voor een heel netwerk. Ik doe alleen een enkele check of het IP adres 1 bepaald adres is, omdat de applicatie hier dagelijks wordt gebruikt en inloggen simpelweg onhandig zou zijn.

@Thomas: Uiteraard gebruik ik geen framesets, maar bedankt voor de tip, slordig dat ik dit over het hoofd heb gezien. Het lijkt nu beter te werken, maar heb er alsnog een vertraging van 1 seconde op zitten omdat een directe redirect nog 'te snel' is blijkbaar.. In ieder geval bedankt, werkt al een stuk soepeler.
 
Ward van der Put
Moderator

Ward van der Put

18/06/2015 11:12:15
Quote Anchor link
Feiko Ritsema op 16/06/2015 16:19:05:
Als iemand correct inlogt wordt hij doorverwezen naar index.php, waar de iptest.php wordt ge'include. Dan vervolgens wordt de gebruiker gelijk weer doorverwezen naar login.php..

Er zit een logicafout in je redenatie en daardoor in de flow van je applicatie. Als iemand correct inlogt, is die hele IP-test overbodig: je hebt dat vaste IP-adres immers opgenomen om nu juist te voorkomen dat vanaf dat IP-adres moet worden ingelogd.

Ik denk dat je de hele structuur moet omwerken. Zet om te beginnen eens alles in één bestand, zodat je logica kunt uitbouwen in één overzichtelijk if/elseif/else.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.