Sessie inhoud wil maar niet gedelete worden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Belastingdienst - Freelance Senior Applicatie ontw

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: We verwachten van je, dat je: Brede ervaring hebt als JAVA-ontwikkelaar; Ervaring hebt met Agile/Scrum-werken en je thuis voelt in een Agile omgeving; Een aandeel levert aan het scrumproces en in de SAFe-releasetrain; Zelfstandig werkt in een scrumteam en intensief de samenwerking op zoekt met je directe collega’s en je omgeving; Ervaring meebrengt met het schattten en inplannen van taken tot en met het testen en demonstreren van de opgeleverde functionaliteit; Collega’s in je

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Front-end developer gezocht

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

Full stack developer Node.js

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

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 »

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 »

Software Ontwikkelaar C# .NET

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Amersfoort gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer .NET, C# voor een gaaf bedrijf in de omgeving van Utrecht! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Lees dan snel verder! Voor een opdrachtgever in de omgeving van Utrecht, zijn wij op zoek naar een Junior Software Developer. Werk jij graag aan verschillende projecten en ga je graag klanten op bezoek? Dan is dit de ideale functie voor jou! Binnen deze functie

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 »

Front-end developer - working on software for arou

Functie They have recently started looking for an experienced Front-end (mobile/app) developer. Because of the short lines within the team, they are also looking for someone who can communicate with the service desk, sales and support for technical questions. You will join their IT team consisting of about 10 colleagues divided over two teams in rooms opposite each other. Half of these are involved in their front-end. You will work together with, among others, the Architect, 1 senior, 1 junior and there is a Team Leader. In terms of technology, they work with a unique tech-stack, particularly because of the

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

Software developer

Functie Momenteel zijn ze op zoek naar een Software developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP),

Bekijk vacature »

C# Developer

Dit ga je doen De requirements in kaart brengen van de klant; Implementeren van functionele en technische specificaties bij opdrachtgevers; Oplossen van bugs; Meewerken aan maatwerksoftware voor nieuwe opdrachtgevers; Het testen en uitleveren van nieuwe functionaliteiten naar de acceptatie en productieomgeving De database ontwikkelen en onderhouden; Hier ga je werken Onze klant is gevestigd in het westen van Nederland en is gespecialiseerd in het ontwikkelen van software voor de levensmiddelen industrie. De software die het team maakt optimaliseert voornamelijk de administratieve processen, maakt deze meetbaar en zorgt ervoor dat de data zo goed mogelijk gebruikt kan worden. Binnen een 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 »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

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

22/12/2024 04:40:42
 
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.