Sessie inhoud wil maar niet gedelete worden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Fullstack Developer

Functie omschrijving Heb jij je universitair diploma Informatica afgerond en ben jij op zoek naar een startersfunctie waar jouw ontwikkeling in een hoog vaandel staat? Voor een softwarebedrijf in Amsterdam zijn wij op zoek naar een Junior Fullstack Developer. Je begint met een op maat gemaakte training om de kennis bij te spijkeren die jij nog mist. Uiteraard leer je het meeste tijdens je werk, maar de training geeft je hiervoor alvast de juiste handvatten. Je kunt het volgende verwachten! Jij ontwikkelt in technieken als Java, Javascript en SQL. Je werkt hierbij volgens de Agile/Scrum methode; Na het afronden van

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Lead Java Developer

Dit ga je doen Je taken bestaan onder andere uit: Het aansturen van een development team bestaande uit 8 collega's op technisch maar ook HR gebied; Het maken van strategische keuzes omtrent de (nieuw)bouw van deze applicatie; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java, Spring, Angular, REST); Reviewen van code en feedback geven op collega developers. Hier ga je werken Als Lead Software Developer ben je verantwoordelijk voor één van de vier Agile Java ontwikkelteams die bouwen aan technologie die duizenden instanties wereldwijd verbindt. Dit Agile team, data Jira en Confluence gebruikt en

Bekijk vacature »

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Java Developer bij een jonge groeiende organisatie

Bedrijfsomschrijving Vind jij het als Java developer ook zo belangrijk dat een bedrijf je de ruimte en tijd geeft voor persoonlijke ontwikkeling? Dan zit je hier helemaal goed. Deze jonge organisatie is opgericht in 2018 en is ondertussen uitgegroeid tot een club van ongeveer 30 medewerkers. Het gaat hier om een echte Java club, die vrijheid en verantwoordelijkheid erg belangrijk vinden. Het bedrijf heeft een informele sfeer en de teams zijn erg hecht met elkaar. Ze delen graag de kennis en ervaringen met anderen, maar vinden andermans mening ook zeer belangrijk. De organisatie zet zich in voor ontwikkeling en besteed

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Boskoop dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat technische klussen uitvoeren op locatie bij klanten.Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Je gaat software en webapplicaties ontwikkelen met behulp van de talen

Bekijk vacature »

Senior PHP developer

Functie Jouw werkzaamheden zullen grotendeels bestaan uit het in teamverband ontwerpen, vernieuwen en door ontwikkelen van het systeem. Het is echt back-end werk (bijvoorbeeld het doorontwikkelen van een API) en dit moet je dan ook liggen. Ze zijn niet persee gebonden aan talen of tools maar gebruiken graag de technieken die het beste aansluiten op de gegeven oplossing. Voor nieuwe (versies van) componenten maken ze veelal gebruik van Go(lang). Bij aanpassingen aan bestaande onderdelen gebeurt dit in PHP en C++. Het team is heel divers, er hangt een relaxte sfeer en ze organiseren regelmatig leuke music nights, game nights e.d.

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Senior Applicatie ontwikkelaar Java

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 We verwachten van je,

Bekijk vacature »

Senior C# Software Ontwikkelaar te Zaandam

Bedrijfsomschrijving Deze werkgever heeft als missie om haar klanten op ICT-gebied volledig te ontzorgen. Ze zijn een ICT bedrijf met een verscheidenheid aan ICT oplossingen waaronder Cloud oplossingen en een groot deel van het werk is gericht op software realisatie. Voor de Enterprise-klanten voert het relatief kleine ontwikkelteam waar jij deel uit van kan gaan maken binnen deze organisatie te Zaandam de grootste opdrachten uit. Niet alleen websites en complexe webapplicaties maar ook mobile apps, web services en complete systeemintegraties! Je moet dan denken aan Dynamics, Sharepoint en Salesforce. Je komt hier terecht in een relatief kleine organisatie met ontzettend

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Opleveren van mooie eindproducten, middels de Agile methodiek; Samenwerken in een team van 10 collega's; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

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

27/04/2024 11:05:10
 
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.