Sessie inhoud wil maar niet gedelete worden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

Back end developer Digital agency

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 20 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

.NET Developer Azure

Dit ga je doen Het ontwerpen en bouwen van diverse applicaties (C#, ASP.NET, MVC); Het ontwikkelen van Webservices (WCF); Het meewerken aan de transitie naar Azure; Het samenwerken met collega's binnen een Scrumteam en meedenken over de User Stories; Het bouwen van unittesten; Meedenken over nieuwe tooling, ontwikkelingen en technologieën in de markt. Hier ga je werken Je komt te werken bij een organisatie die verantwoordelijk is voor de ontwikkeling van verschillende portalen. Deze portalen worden gebruikt door diverse partijen en jouw taak is om ervoor te zorgen dat deze optimaal functioneren. Je wordt onderdeel van een Scrumteam en werkt

Bekijk vacature »

Medior/Senior Python developer (Django)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en werken ze met pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Er is een kwaliteitsfocus en dan biedt ruimte om verbeteringen echt door te voeren binnen de gehele

Bekijk vacature »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

Senior Front-End Developer

Als Senior Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Wat doe je als Senior Front-End Developer bij Coolblue? Als Senior Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Senior Front-end Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Nadenken

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Senior Cobol Applicatieontwikkelaar

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving In de applicatie ETM

Bekijk vacature »

Back-end .NET Developer

Functie omschrijving C# / .NET Developer gezocht voor een dynamische organisatie in de regio Houten! Voor een leuke organisatie in de regio Houten zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. In deze functie werk jij aan verschillende projecten en ga je vaak bij klanten op bezoek. Binnen deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid treffen. Bedrijfsprofiel Waar ga je werken? Het bedrijf waar je gaat werken is gespecialiseerd in het ontwerpen en implementeren van procesautomatisering en procesinformatisering. Zij doen dit onder andere voor de (petro)chemie, pharma, infra,

Bekijk vacature »

IoT Developer

Ben jij innovatief, heb jij passie voor energie en ben je data gedreven? Bouw dan mee aan IoT binnen Bredenoord. Samen met een gedreven team werk jij aan mooie technische en innovatieve oplossingen. Wat houdt de functie van IoT Developer in? Binnen Bredenoord zijn wij momenteel volop in ontwikkeling met ons IoT platform. Als uitbreiding van ons team zijn wij op zoek naar een IoT Developer. Je zal in projectverband meehelpen met het implementeren van IoT vraagstukken binnen Bredenoord. Als IoT Developer op onze R&D-afdeling word je verantwoordelijk voor het verder inrichten en beheren van ons nieuwe IoT platform. Dat

Bekijk vacature »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

C#.NET/Unity Developer

Functieomschrijving Voor een gewaardeerde werkgever in de omgeving van Breda zijn wij op zoek naar een software ontwikkelaar. Dit bedrijf houdt zich bezig met de ontwikkeling van WMS Software (C#/Unity & SQL). Past dit bij jou? Lees snel verder! Jouw werkzaamheden zullen er als volgt uitzien: Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Samen met 6 applicatieontwikkelaars hebben jullie de verantwoordelijkheid voor de uitbreiding en ontwikkeling van de webapplicaties; Het uitvoeren van updates/aanpassingen aan de huidig draaiende applicaties; Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software. Bedrijfsprofiel Wie

Bekijk vacature »

Software Developer (Junior functie)

Functieomschrijving Wij zijn op zoek naar een Software Developer! Sta jij in de startblokken om je carrière te beginnen en kan je niet wachten om toffe software te gaan ontwikkelen? Kortom, ben je onlangs afgestudeerd of sta je op het punt om je papiertje te behalen? Voor een IT dienstverlener dat gespecialiseerd is in Microsoft technologie zijn wij op zoek naar C#.NET Developers. Het bedrijf heeft meerdere klanten in regio Utrecht waar je permanent kan komen te werken. Kom je liever te werken bij een klein softwarebedrijf of bij een groot consultancy bureau? Dat is helemaal aan jou de keuze!

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »
Snelle Jaap

Snelle Jaap

02/07/2018 11:56:11
Quote Anchor link
Ik heb een loginscript met twee mogelijkheden, of een admin, of een willekeurige gebruiker.

Mijn probleem is dat wanneer ik eerst inlog met bijvoorbeeld een admin, ik netjes bovenin 'admin' zie staan, maar zodra ik uitlog en weer inlog met een andere gebruiker, zie ik niet die naam staan maar nog steeds 'admin'. Andersom idem dito.

Ik heb al van alles geprobeerd, unset, session_destroy(); noem het maar op.

Dit is mijn bestanden structuur:

index.php (bevat header met connection.php en de html login form)
dashboard.php (bevat header met connection.php en wat html)
admin.php (zelfde als hierboven)
header.php (dit wordt boven alle paginas geinclude behalve login.php en connection.php aangezien dat scripts zijn, deze pagina heeft als eerste regel de include van connection.php).
connection.php (mijn connection script, met de eerste regel session_start(); )
login.php (mijn loginscript, dit script wordt opgeroepen via ajax, aangezien dit via ajax wordt geladen moet hier de volledige connectie class in staat met bovenaan nogmaals session_start(); ).
logout.php (mijn logout script, hoort de sessie te verwijderen en daarna te redirecten naar mijn login pagina, je klikt hierop vanuit een link in de header.php)

Dit is mijn login.php (ik weet dat dit onveilig is, dat ga ik aanpakken nadat de sessies werken zoals ik wil):

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
session_start();
class Connection {
    // Configure Database Vars
    private $host     = 'localhost';
    private $username = 'xxxxx';
    private $password = 'xxxx';
    private $db_name  = 'xxxxx';
    public $db;

    function
__construct() {
        // Create connection
        $db = new mysqli($this->host, $this->username, $this->password, $this->db_name);
        // Check connection
        if ($db->connect_errno > 0) {
            die('Unable to connect to the database: '.$db->connect_error);
        }

        $this->db = $db;
    }


    public function query($query) {
        $db = $this->db;
        $this->db->query('SET NAMES utf8');
        if (!$result = $this->db->query($query)) {
            die('There was an error running the query ['.$db->error.']');
        }
else {
            return $result;
        }
    }


    public function multi_query($query) {
        $db = $this->db;
        if (!$result = $this->db->multi_query($query)) {
            die('There was an error running the multi query ['.$db->error.']');
        }
else {
            return $result;
        }
    }


    public function real_escape_string($value) {
        return $this->db->real_escape_string($value);
    }


    public function inserted_id() {
        return $this->db->insert_id;
    }
}


$conn = new Connection;

$username = $_POST['username'];
$userpassword = $_POST['userpassword'];

if(empty($username) && empty($userpassword)){
    $logindata = array(
        'userdata' => '',
        'message' => 'Vul een gebruikersnaam en wachtwoord in',
     );

    echo json_encode($logindata);
}
else if(empty($username)){
    $logindata = array(
        'userdata' => '',
        'message' => 'Vul een gebruikersnaam in',
     );

    echo json_encode($logindata);
}
else if(empty($userpassword)){
    $logindata = array(
        'userdata' => '',
        'message' => 'Vul een wachtwoord in',
     );

    echo json_encode($logindata);
}
else{
  //Both filled in, begin logincode:
  $getuser = "
    SELECT u.id as userid, u.username, u.rights, u.password, c.name, c.userid as companyuid, c.logo
    FROM users u
    LEFT JOIN company c
    ON u.id = c.userid
    WHERE u.username = '"
.$conn->real_escape_string($username)."'";
  $getusercon = $conn->query($getuser);
  $getuser = $getusercon->fetch_assoc();

    if(!empty($getuser['logo'])){
      $sessionlogo = str_replace('/home/website/public_html/', '', $getuser['logo']);
    }
else{
        $sessionlogo = 'Hier een placeholder';
    }


  if($userpassword == $getuser['password']){
    if($getuser['rights'] == '1'){
      $_SESSION['userdata']['user'] = 'Administrator';
            $_SESSION['userdata']['rights'] = '1';
            $_SESSION['userdata']['logo'] = 'assets/images/logo.png';
      $loginresult = array(
        'login_result' => 'success',
     );

      $logindata = array(
        'userdata' => 'admin',
     );

    echo json_encode($logindata);
    }
else{
      $_SESSION['userdata']['user'] = $getuser['name'];
            $_SESSION['userdata']['rights'] = '0';
            $_SESSION['userdata']['logo'] = $sessionlogo;
      $loginresult = array(
        'login_result' => 'success',
     );

      $logindata = array(
        'userdata' => 'user',
     );

    echo json_encode($logindata);
    }
  }
else{
        $logindata = array(
            'userdata' => '',
            'message' => 'Wachtwoord en gebruikersnaam komen niet overeen',
     );

    echo json_encode($logindata);
  }
}

?>


Dit is mijn ajax code in mijn footer (deze staat binnen een document ready functie):

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
21
22
23
// Login Ajax Code
$( "#content" ).on("submit", "#loginform", function( event ) {
  // Stop normal form behaviour
  event.preventDefault();
  // Retrieve input fields and their values
  var $form = $( this ),
  $username = $form.find( "input[name='username']" ).val(),
  $userpassword = $form.find( "input[name='userpassword']" ).val(),
  url = $form.attr( "action" );
  // Post above values to the action of the form
  var posting = $.post( url, { username: $username, userpassword: $userpassword} );
  // Show result in a div
  posting.done(function( data ) {
    obj = JSON.parse(data);
    if(obj.userdata == ''){
      $( "#loginresult" ).empty().slideDown('fast').append( obj.message );
    }else if(obj.userdata == 'admin'){
      window.location.href = "http://www.website.nl/admin";
    }else if(obj.userdata == 'user'){
      window.location.href = "http://www.website.nl/dashboard";
    }
  }, "json");
});


Mijn logout.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
session_start();
unset($_SESSION['userdata']);
header("Location: http://website.nl/login");
die();
?>


Ik heb ook session_destroy(); geprobeerd ipv unset maar dit heeft hetzelfde effect.

Mijn header.php heeft deze code bovenaan:

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
<?PHP
include 'includes/connection.php';
// Check if session is set
if(isset($_SESSION['userdata'])){
  // Check if page is adminonly, if yes and user has no rights to visit page, redirect to loginpage
  if($_SESSION['userdata']['rights'] == '0' && $restriction == 'admin'){
    header('Location: http://www.website.nl/login');
  }

  // Logo
  $logo = '<img class="headerlogo" src="'.$_SESSION['userdata']['logo'].'">';
}
else{
  header('Location: http://www.website.nl/login');
}

?>


Met deze code log ik dus in, de 1e keer correct, maar de keren erna wil hij de vorige user maar niet vergeten/verwijderen.
Ook log ik soms in en word ik direct weer geredirect naar mijn login form, oftewel pas na twee keer inloggen wordt ik daadwerkelijk geredirect.

Waar kunnen deze problemen aan liggen?

Edit:
UBB-code fix
Gewijzigd op 03/07/2018 11:11:41 door - Ariën -
 
PHP hulp

PHP hulp

17/05/2024 08:25:26
 
Thomas van den Heuvel

Thomas van den Heuvel

02/07/2018 12:15:19
Quote Anchor link
Los van waar het aan zou kunnen liggen zou ik eerst de volgende zaken oplossen, en dan kijken of de problemen nog steeds spelen:

- een class definitie en daarna allerlei code? zet deze class definitie eens in een apart bestand :(
- SET NAMES stelt weliswaar een character encoding in aan de MySQL-kant, maar PHP is zich hier niet van bewust (en komt dus mogelijk niet overeen met de default die deze aanneemt), en dat heeft mogelijk tot gevolg dat je escaping-functionaliteit niet goed werkt, met alle veiligheidsimplicaties van dien... stel in plaats hiervan een character encoding in middels set_charset(), het instellen hiervan met SET NAMES wordt door PHP.net afgeraden
- header('Location: ...') transporteert je niet automagisch naar de nieuwe locatie (interne link), ook hier kan het gebruik of het ontbreken van een exit statement het verschil betekenen tussen een veilige en een onveilige applicatie, ook kan dit functioneel roet in het eten gooien omdat alle code tot aan het einde van het script wordt uitgevoerd, DAARNA word je pas geredirect!
- EDIT ook zou je eerst op het bestaan van een variabele moeten controleren voordat je het ergens mee vergelijkt, deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($_SESSION['userdata']['rights'] == '0' && $restriction == 'admin'){
    header('Location: http://www.website.nl/login');
}

?>

Levert dus mogelijk foutmeldingen op. Heb je ook het melden + weergeven van foutmeldingen aanstaan? Dit lijkt mij wel handig bij ontwikkeling, vooral als er dingen mis( lijken te )gaan.

Het heeft geen zin om iets te bestuderen als je weet dat er fouten in zitten. Los eerst bovenstaande fouten op, en kijk dan of het probleem nog speelt.

Los hiervan begeef je je in een rare spagaat waarbij je onderscheid maakt tussen admins en andere gebruikers wat zorgt voor (enorm) wollige code. Er zijn manieren om dit makkelijker op te lossen, bijvoorbeeld door het introduceren van een "springplank pagina" waar je altijd naartoe gaat na inloggen. Deze pagina maakt in code onderscheid tussen gebruikers, en bepaalt vervolgens waar iemand naar ge-redirect wordt. Dit zijn bij voorkeur geen checks die je in JavaScript hardcode, die ook nog eens voor de buitenwereld zichtbaar zijn waarmee je de interne structuur van je applicatie verder blootlegt.
Gewijzigd op 02/07/2018 12:21:00 door Thomas van den Heuvel
 
Snelle Jaap

Snelle Jaap

02/07/2018 12:24:23
Quote Anchor link
Oke bedankt voor de tips. Moet ik voor die char encoding een hoop omgooien of volstaat een kleine aanpassing?
Wat je zegt met inloggen naar een "springplank" pagina is inderdaad beter zodat niemand de redirects ziet, ga ik doen.

Het probleem is opgelost trouwens, in mijn ajax redirect ik naar www.mijnsite.nl/bla en in mijn logout.php redirect ik naar mijnsite.nl oftewel zonder www. Ik zag dat er twee sessies actief waren, een op elk domein. Nu ik alles gelijkgetrokken heb werkt het prima.
 
Thomas van den Heuvel

Thomas van den Heuvel

02/07/2018 12:33:00
Quote Anchor link
Quote:
Oke bedankt voor de tips. Moet ik voor die char encoding een hoop omgooien of volstaat een kleine aanpassing?

Nou, het correct instellen doe je simpelweg door $db->set_charset('utf8'); toe te voegen, of het UTF-8 equivalent wat jij gebruikt in je database, direct na het maken van een connectie.

Deze reparatie kan voor "fouten" zorgen als je eerder al data naar de database had weggeschreven in deze website. Die komen nu mogelijk naar boven omdat je nu wel op de goede manier communiceert met je database. Dit komt omdat je voorheen data op de verkeerde manier wegschreef, maar MySQL loste dit voor je op omdat deze onder water allerlei vertalingen tussen character encoderingen voor je uitvoert. Dit ligt niet aan MySQL maar aan de applicatie die een verkeerde voorstelling van zaken (over de character encoding) voorspiegelt aan je database.

Naar mijn mening is het altijd beter om expliciet een character encoding in te stellen, zodat je niet afhankelijk bent van defaults die mogelijk niet kloppen.
 
Snelle Jaap

Snelle Jaap

02/07/2018 13:24:25
Quote Anchor link
Ik heb nu twee scripts, eentje voor als er een fout is om wat voor reden dan ook (foute gegevens, lege gegevens etc) dit returned altijd een bericht in json. Ook heb ik een script voor als de gegevens wel kloppen, deze start de sessie en redirect, alleen het redirecten werkt niet.

Hoe kan ik via PHP naar een pagina redirecten als de headers al zijn verstuurd?

In mijn redirect script heb ik nu dit staan (naast de connectie en query natuurlijk):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
if($userpassword == $getuser['password']){
  if($getuser['rights'] == '1'){
    $_SESSION['userdata']['user'] = 'Administrator';
    $_SESSION['userdata']['rights'] = '1';
    header("Location: http://sitenaam.nl/admin");
  }else if($getuser['rights'] == '0'){
    $_SESSION['userdata']['user'] = $getuser['username'];
    $_SESSION['userdata']['rights'] = '0';
    header("Location: http://sitenaam.nl/dashboard");
  }
}


En in mijn ajax:

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
// Check if data is correct or not
      postcheck.done(function( check ) {
        obj = JSON.parse(check);
        if(obj.state == 'fail'){
          $( "#loginresult" ).empty().slideDown('fast').append( obj.message );
          console.log('fail');
        }else if(obj.state == 'success'){
          // Post again to redirectscript which sets session and redirects to correct page
          url1 = "includes/loginredirect.php";
          var postredirect = $.post( url1, { username: $username, userpassword: $userpassword} );
          postredirect.done(function( redirect ) {
            console.log('redirect');
          });
        }
      }, "json");


De foutmeldingen werken allemaal en wanneer ik inlog met een correcte gebruiker dan zie ik `redirect` staan in mijn console dus tot dat stuk werkt de code ook prima. Ik zie alleen eindeloos mijn preloader draaien en hij redirect nooit daadwerkelijk naar de pagina die ik aangeef in mijn PHP script. Ik zie verder ook geen errors in mijn console, alleen een warning: [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
Gewijzigd op 02/07/2018 13:26:42 door Snelle Jaap
 
Thomas van den Heuvel

Thomas van den Heuvel

02/07/2018 14:04:16
Quote Anchor link
Je zou je ook kunnen afvragen waarom je van AJAX gebruik maakt terwijl je uiteindelijk toch redirect. Kun je niet beter meteen alles serverside afhandelen dan? Gewoon in de verwerk-stap van het inlogformulier. En als je in die verwerkstap geen output produceert en na afloop altijd redirect (waarbij je dus in wezen gebruik maakt van het POST/redirect/GET patroon) dan kom je ook nooit in de knoei met headers.

Daarbij, wanneer je inlogt omvat dit in wezen een "verandering van de applicatie-toestand" (state change), er valt iets te zeggen om op zulke momenten het sessie-id te verversen met session_regenerate_id().

Nog iets anders: je slaat nu allerlei credentials op in je sessie, rollen en rechten enzo, maar ververs je deze elke page-access? Wat gebeurt en bijvoorbeeld als je de rechten van iemand intrekt? Zijn die dan nog steeds van kracht totdat deze persoon uitlogt? Of heb je allerlei extra code geschreven om zo iemand dan geforceerd uit te loggen? Het is waarschijnlijk veel verstandiger om elke page-access opnieuw een soort van User object te bouwen aan de hand van een user id in de sessie (is eigenlijk het enige wat je hierin qua gebruikersgegevens hoeft bij te houden). Aan dit object koppel je dan rollen en rechten enz. die je elke page-access opnieuw ophaalt uit je database zodat deze altijd up-to-date zijn.

Sorry als ik dit een beetje cru formuleer, maar heb je uberhaupt nagedacht over hoe je je gebruikersbeheer vormgeeft?

EDIT: misschien is het ook verstandig om een redirect-functie te maken, zodat je ook geen exit; meer vergeet na een header('Location: ...') zoals in deze eerder gelinkte reactie al stond omschreven (interne link).

EDIT: oh, enne, zijn die wachtwoorden onversleuteld opgeslagen? dat is ook een big no-no.

Quote:
Dit is mijn login.php (ik weet dat dit onveilig is, dat ga ik aanpakken nadat de sessies werken zoals ik wil):

Dit is om te beginnen al eigenlijk de verkeerde insteek. Vanaf het begin, dus ook bij het ontwerp, zou security al meegenomen moeten worden. Je wilt niet na afloop alles gaan patchen... Dit is zoiets als een huis bouwen met een fundament voor twee verdiepingen, en onderweg bedenk je dat je er eigenlijk een torenflat van wilt maken, je fundament voorziet daar mogelijk niet in.
Gewijzigd op 02/07/2018 14:19:35 door Thomas van den Heuvel
 
Ben van Velzen

Ben van Velzen

03/07/2018 03:34:34
Quote Anchor link
Waarom heb je het idee dat een location header in PHP in javascript zichtbaar zou zijn of zelfs uitgevoerd zou worden? Ja, het wordt uitgevoerd, maar niet op de manier die jij voor ogen hebt. Waarom laat je dit niet gewoon zonder AJAX geneuzel afhandelen? Dat is veel eenvoudiger. Of verwacht je dat mensen keer op keer een foute username/wachtwoord invoeren dat je het zo mooi mogelijk wil maken?
 
Snelle Jaap

Snelle Jaap

03/07/2018 10:53:13
Quote Anchor link
Ik weet dat het niet helemaal de handigste volgorde is maar dit is letterlijk het eerste stukje code, dus zo'n drama is dat niet. Zodra ik de beveiliging voor dit script op orde heb kan ik dat bij alle volgende scripts gelijk doorvoeren.

Wachtwoorden versleuteld opslaan hoort daar ook bij (er zijn nog maar 2 accounts, dus dat is met terugwerkende kracht zo gedaan).

@Ben van Velzen
Ik zie niet echt een reden om het niet met AJAX te doen, werkt lekker snel zonder refresh.
 
Ben van Velzen

Ben van Velzen

03/07/2018 10:57:02
Quote Anchor link
Het werkt best lekker, als je begrijpt hoe je het moet doen. Een location header in PHP gaat null komma niets uithalen. Je zult de redirect in javascript moeten doen, en daarnaast uiteraard een oplossing klaar hebben staan voor het geval javascript uitgeschakeld is.
 
Snelle Jaap

Snelle Jaap

03/07/2018 10:59:27
Quote Anchor link
Oke dus zoals ik het eerst had?
 
Thomas van den Heuvel

Thomas van den Heuvel

03/07/2018 17:24:42
Quote Anchor link
Snelle Jaap op 03/07/2018 10:53:13:
werkt lekker snel zonder refresh.

Het is nog steeds elke keer een request, dus of je dit nu doet op de reguliere manier (zonder het produceren van output) of via AJAX lijkt mij echt lood om oud ijzer. Je hebt nog steeds een database nodig. Er is nog steeds terugkoppeling. Goed het scheelt een request als je de pagina met het loginformulier opnieuw laadt. Maar om dat nu tot in den treure te optimaliseren... verwacht je dat gebruikers heel veel tijd gaan besteden aan het inloggen met verkeerde wachtwoorden?

Dat gezegd hebbende, misschien is het ook verstanding om een CSRF-token te gebruiken in het loginformulier, of een soort van token.

Als je toch je AJAX-reis wilt voortzetten, het lijkt mij dan handig om een soort van status terug te geven (dit doe je al), en eventueel een URL waar naar doorverwezen wordt. En vervolgens redirect je met met window.location = <bestemming>; in het .done() deel.

Waarom je dan trouwens je informatie nog een keer zou willen posten is mij een raadsel. De administratie voor het inloggen (instellen sessie-vars etc) regel je meteen in het script waar je met AJAX naartoe POST lijkt mij.
 
Snelle Jaap

Snelle Jaap

04/07/2018 11:16:29
Quote Anchor link
Klopt is dan wel beter zo (1 script). Dan de locatie terugsturen naar AJAX via JSON ipv de redirect in javascript te zetten, dan is dat ook niet zo in te zien in de broncode.
 
Ben van Velzen

Ben van Velzen

04/07/2018 11:36:37
Quote Anchor link
Je hoeft zelfs niet eens, zeker niet als je javascript als progressive enhancement gebruikt, dus zoals het hoort.
Gewoon in je submit alleen de default preventen als het inloggen mislukt, en anders gewoon de formulierlocatie laten volgen.

EDIT: nvm, dat zou een volledig synchrone ajax request vereisen, dat zou niet netjes zijn.
Gewijzigd op 04/07/2018 11:38:29 door Ben van Velzen
 



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.