Sessie inhoud wil maar niet gedelete worden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Node.js developer looking for a challenging consul

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

.Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Als developer bouw je in DevOps teams aan enterprise applicaties, nieuwe IOT, Chatbots of AI oplossingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren in dit vakgebied. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij vorig jaar Microsoft Partner of the year geworden.

Bekijk vacature »

(Junior) Back-end Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Altijd al willen werken bij een organisatie, die maatwerk applicaties bouwt, die echt impact hebben in de maatschappij? Dit is je kans. Voor een kleine organisatie in de regio van Eindhoven ben ik op zoek naar een C# Ontwikkelaar. Jij gaat aan de slag met de ontwikkeling van maatwerk software en applicaties. Deze organisatie werkt voor grote organisaties in Nederland, maar ook voor het MKB. De projecten waar je aan gaat werken zijn erg divers, waardoor je werk uitdagend blijft en je erg veel kan leren. Verder ga je aan

Bekijk vacature »

Software developer (PHP) - Utrecht centrum

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

Junior full stack developer

Functie Als full stack developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

Full-stack developer

Als Full-stack developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Samen met je SCRUM team werk je aan zowel de front- als de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en echt het verschil te kunnen maken. Ons ontwikkelteam bestaat uit ruim 40 ontwikkelaars, testers, scrum

Bekijk vacature »

Sportieve Junior C#.NET developer gezocht!

Bedrijfsomschrijving Wil jij werken aan webapplicaties bij de marktleider binnen de branche? Voor een klant in de buurt van Oosterhout ben ik op zoek naar een Fullstack .NET developer. Dit bedrijf bestaat bijna 10 jaar en is inmiddels uitgegroeid tot marktleider in Nederland en heeft tevens kantoren in meerdere landen in Europa. Dit bedrijf bouwt webapplicaties waarbij internationaal enkele honderdduizenden deelnemers, soms tegelijk, een beroep doen op de realtime data uit deze applicaties. Dit brengt erg veel technische uitdaging met zich mee. Ze ontwikkelen nieuwe applicaties maar ook bestaande applicaties worden uitgebreid en verbeterd. Hier kan jij een onderdeel van

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 »

Fullstack JavaScript Developer Webapplicaties

Bedrijfsomschrijving Voor deze organisatie ben ik op zoek naar een getalenteerde Fullstack JavaScript Developer. Ze is een snelgroeiend software development agency dat zich richt op het ontwikkelen van moderne webapplicaties en complexe systemen voor haar klanten. Ze is gevestigd onder de rook van Utrecht en heeft als doel om tot de top van de Nederlandse agencies te behoren. Deze organisatie maakt softwareoplossingen voor verschillende soorten bedrijven. Innovatie staat hoog in het vaandel en je zult dus met nieuwe technieken aan de slag gaan. Ze hebben klanten in vele branches zitten, zoals retail, finance, gezondheid en onderwijs. De diverse klanten zorgen

Bekijk vacature »

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

SQL database developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als SQL database developer? Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het development team zijn wij op zoek naar een SQL database ontwikkelaar. Wil jij werken voor een groeiende werkgever in regio Breda waar jij de ruimte en tijd krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van logistieke processen; Je gaat projecten vanaf het begin tot het

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

Bekijk vacature »

Front-End React Developer

As a Front-End React Developer you improve the user-experience of our web applications for your colleagues in Coolblue. How do I become a Front-End React Developer at Coolblue? As a Front-End React Developer you are responsible for developing user interface components and implementing them using React.js concepts and workflows. You work with the UX Designer and get energy from coming up with creative solutions and present these within the team. During the day you gather and welcome feedback on your technical and soft skills. Would you like to become a Front-End React Developer at Coolblue? Read below if the job

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

19/04/2024 03:11:17
 
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.