Sessie inhoud wil maar niet gedelete worden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Mobile Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Mobile Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

React developer Inhouse cloudplatform

Functie De functie: Als front-end developer kom je te werken naast 2 andere front-end/React developers, waaronder één senior. Een hele mooie kans dus om in korte tijd veel nieuwe kennis en ervaring op te doen. Ze hebben momenteel veel werk hierin en daarom willen ze het team graag uitbreiden. Het is van belang dat je, zeker gezien het vele thuiswerken, in ieder geval al een aantal projecten hebt gedaan in React. Taken waar je aan kunt denken zijn het ontwikkelen van client-applicaties o.b.v. HTML5, React en andere open standaarden. Ook ben je nauw betrokken bij het implementeren van designs o.b.v.

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 »

3D BIM Add-on Developer

As a 3D BIM add- on developer at KUBUS, you will develop add-ons (called BCF- Managers) to the leading building information modeling (BIM) programs Revit, Navisworks, Archicad, AutoCAD and Tekla Structures. BCF Managers enable data transfer between BIM software and BIMcollab. You will work on both the front- and the back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij als software ontwikkelaar toe aan een nieuwe uitdaging? Dan zoeken wij jou! Voor het maken van de procesbesturingssoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Ontwerpen, programmeren en testen van product aanpassingen; Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden, o.a. door middel van SCRUM; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Implementeren van nieuwe product

Bekijk vacature »

Medior PHP developer

Functie Samen met je development team werk je Agile Scrum en met jullie gezamenlijke kennis en ervaring bepalen jullie samen de beste keuze voor techniek en architectuur. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en denkniveau • Je hebt goede kennis en ervaring met PHP • Je bent niet bang voor complexe projecten • Je werkt graag zelfstandig aan applicaties • Je bent altijd nieuwsgierig naar nieuwe

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. Would you also like to become a Senior Front-End Developer at Coolblue?

Bekijk vacature »

Python (Django) developer - Remote in The Netherla

Functie Together with your team, consisting of a senior, 2 mediors and one junior developer, you will work on their software in an Agile-based approach. You have an eye for quality, risk, and customer interest. Communication with your colleagues and, where necessary, with customers, plays an important role in achieving a successful result. As a person, you are smart, get things done, and are result-oriented. There is a lot of independence within the development team, apart from the stand-up (10:00 am) and occasional pair-programming sessions. Techniques they use include Python, Django, MySQL, Mercurial, Ubuntu Linux, Nginx. In terms of front-end

Bekijk vacature »

APEX Ontwikkelaar in een team van Oracle Developer

Bedrijfsomschrijving Wij zijn op zoek naar een APEX Ontwikkelaar om onze opdrachtgever in Den Haag te versterken. In deze rol zul je verantwoordelijk zijn voor het ontwikkelen en onderhouden van de front-end van onze applicaties met behulp van Oracle Application Express (APEX). Je werkt aan zowel inhouse als externe projecten. De sfeer binnen het Oracle team is gemoedelijk en men probeert elkaar te helpen én van elkaar te leren. Zo ontstaat er een prettige en plezierige werksfeer waar ruimte is voor persoonlijke ontwikkeling en groei. Er wordt gewerkt met de meest nieuwe technologieën waardoor je kennis up-to-date blijft. Het bedrijf

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 »

.NET Developer

Dit ga je doen Binnen het team bouw je aan een applicatie met andere .Net Developers, testers een Product Owner en een Business Analyst. Met het team wordt de backlog besproken. In overleg claim jij jouw deel en zorgt ervoor dat onderhoud en innovatie wordt gerealiseerd. Het project dat momenteel draait is het opgraden van de omgeving. Doorontwikkelen van de huidige applicatie; Overleggen met teamleden om de backlog te verdelen; Onderhouden van de huidige omgeving; Sparren met de business en het ophalen van nieuwe requirements. Hier ga je werken De organisatie is een van de grootste landelijke aanbieder van diverse

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 »

Front end developer React Sportgames

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

Bekijk vacature »

Ervaren C#.NET developer

Functieomschrijving We zijn op zoek naar een ervaren C#.NET programmeur voor een moderne werkgever in de regio Prinsenbeek. Als programmeur zal je bezig zijn met het ontwikkelen van op maat gemaakte webapplicaties voor verschillende klanten, waarbij je ervoor zorgt dat complexe processen zo goed mogelijk worden ondersteund. Je takenpakket omvat onder andere: Werken met databases en dataopslagoplossingen, implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens, evenals het schrijven van technische documentatie en gebruikershandleidingen. Het ontwikkelen en onderhouden van C#.NET-applicaties. Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen. Het schrijven van hoogwaardige en herbruikbare codes.

Bekijk vacature »

Full Stack Developer

Ben jij een kei van een full-stack developer? Heb je ambitie om te groeien en jezelf te ontwikkelen binnen een ambitieus bedrijf? Gaat jouw hart sneller kloppen van transpilers of frameworks zoals Angular, Vue of React? Dan ben jij de persoon die wij zoeken! Voor onze opdrachtgever zijn wij op zoek naar een full-stack developer om onderdeel te zijn van een team dat bestaat uit gedreven developers. Ieders met hun eigen specialiteiten en kennis van de projecten en behoeften vanuit de product owners. We zoeken iemand die met zijn/haar huidige competenties en domeinen dit team wil begeleiden, stimuleren en tevens

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

21/11/2024 20:01:30
 
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.