Session Handler Class, wordt steeds uitgelogd.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Ontwikkelaar PHP

Functie omschrijving Software Ontwikkelaar PHP gezocht! Wij zijn op zoek naar een ervaren PHP Software Ontwikkelaar om het team van onze opdrachtgever te versterken! De ideale kandidaat zal fungeren als verlengstuk van klanten en complexe technische vraagstukken met enthousiasme benaderen. Naast het werken met de nieuwste technologieën, ben je in staat om aan meerdere projecten tegelijkertijd te werken. Als je deze uitdaging aangaat, werk je nauw samen met front-end developers en draag je bij aan het realiseren van grote veranderingen bij klanten. Het bedrijf zoekt iemand die zichzelf graag uitdaagt en altijd streeft naar het leveren van de beste resultaten.

Bekijk vacature »

Ervaren Magento developer gezocht!

Functie Je komt te werken in een zelfsturend team waarin vertrouwen voorop staat en inbreng en ideeën worden gewaardeerd. Ook staat innovatie centraal. Ze bieden jou de mogelijkheid om jezelf door te ontwikkelen. Denk hierbij aan cursussen en een persoonlijk ontwikkelplan. Je komt terecht in het team van momenteel 4 (ervaren) collega’s en zal meewerken aan de doorontwikkeling en nieuwbouw van de Magento platformen van meerdere opdrachtgevers volgens Agile/Scrum. Denk hierbij aan nieuwe functionaliteiten, UX en koppelingen met verschillende back-end systemen. Als ervaren developer zul je hiernaast ook andere developers assisteren en waar nodig de leiding nemen in het project.

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 »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

Bekijk vacature »

PHP developer (Laravel/Vue.js)

Functie Het team telt momenteel 20 collega’s, bestaande uit developers (front- en backend) en het operations team, waaronder ook het management en twee scrum masters vallen. Ze zijn op zoek naar een PHP developer die in staat is zelfstandig te werken. Je komt te werken in één van de drie scrumteams en gaat aan de slag met een project voor de klant. Het fijne hieraan is dat je wel afwisseling hebt qua werk, maar tegelijkertijd doorlopend werkt voor bestaande klanten. Hierdoor krijg je ook de kans om echt de diepte in te gaan en innovatieve technische oplossingen neer te zetten.

Bekijk vacature »

Junior .NET developer

Functie Wij zijn bezig met het ontwikkelen van een nieuw product en wij hebben jouw hulp hierbij nodig! Als junior .NET ontwikkelaar krijg jij de kans om samen met ons deze nieuwe uitdaging aan te gaan! Momenteel bestaat ons team uit drie interim Software Engineers. Twee hiervan zijn zeer ervaren .NET specialisten die inmiddels hun strepen in dit vakgebied al hebben behaald. Ook hebben wij een junior als onderdeel van ons team die zich op dit moment nog bezig houdt met de Front-end (Angular/TypeScript), maar zich nu ook meer gaat verdiepen in de backend. Wij willen ons team graag verder

Bekijk vacature »

Applicatie Ontwikkelaar

Bedrijfsomschrijving DUO verzorgt als uitvoeringsorganisatie, zijnde onderdeel van het Ministerie van Onderwijs, Cultuur en Wetenschap de uitvoering van complexe wet- en regelgeving en heeft een uitgebreid dienstenpakket. DUO financiert en informeert onderwijsdeelnemers en onderwijsinstellingen. Voor verdere informatie zie www.duo.nl Functieomschrijving Wie zoeken we? Jij bent een enthousiaste, flexibele OPS’er die het leuk vindt om het bestaande examenlandschap te vernieuwen. Je bent leergierig en hebt interesse in cloud- en containertechnieken zoals OpenShift, Docker en Helm. Je gaat een uitdaging niet uit de weg en wil je nieuw opgedane kennis graag delen met de collega’s binnen en buiten het team. Doordat de

Bekijk vacature »

Backend Developer Scrummaster .NET

Samengevat: Deze werkgever is een ambitieus internetbedrijf met een passie voor digitale communicatie. Ben jij geschikt als Backend Developer? Heb je ervaring met .NET platform? Vaste baan: Backend Developer / SCRUM Master Scrum HBO WO €3.800 - €6.000 Deze werkgever is een innovatief bedrijf met enthousiaste mensen die jarenlang ervaring hebben met het ontwikkelen internet- en intranetoplossingen. Wij houden van korte lijnen en open en eerlijke communicatie. Wij zetten graag onze jarenlange ervaring in om perfect werkende oplossingen te ontwikkelen. Wij ondersteunen dienstverlenende organisaties bij het ontwikkelen en realiseren van een effectief, adaptief communicatieplatform. Je ontwikkelt met ons de meest

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar ga jij aan de slag bij een van onze klanten actief in de High Tech Industrie. Onze klanten zijn voornamelijk gelokaliseerd in de omgeving van Eindhoven. Wij zijn erg selectief als het gaat om de projecten die wij accepteren en richten ons dan ook alleen op innovatieve en complexe projecten. Omdat onze klanten voornamelijk gespecialiseerd zijn in de machinebouw, werk jij ook vaak dicht tegen de machines aan. Ons team bestaat momenteel uit Embedded engineers, IOT developers en Cloud engineers. Wij werken voornamelijk aan Microsoft projecten waar er gebruik wordt gemaakt van WPF, UWP, .NET Core

Bekijk vacature »

High level C++ QT Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 13486 Introductie Would you like to be involved in every aspect of software development for our exceptional products, from specification and design to testing and integration? If you're passionate about software development and eager to apply your programming skills to create customer-focused deliverables, then this is the perfect chance for you to expand your expertise. You can become a member of our Machine Control department's data-driven development team, where you'll design and build software solutions that optimize machine productivity. As a senior software design engineer, you'll participate in all phases

Bekijk vacature »

Senior Developer Betty Blocks Blauwe Haven Rotterd

Functieomschrijving Voor de Politie zijn wij opzoek naar een Senior Developer Betty Blocks Blauwe Haven Rotterdam. De politieorganisatie heeft jaarlijks te maken met een aanzienlijk aantal politiemedewerkers die vanwege mentale overbelasting niet of beperkt inzetbaar zijn. De Blauwe Haven Rotterdam ondersteunt deze politiemedewerkers in hun herstel en re-integratieproces. De huidige digitale systemen van de Politie bieden onvoldoende ondersteuning in het herstel- en re-integratieproces van politiemedewerkers. Zowel voor de politiemedewerkers als voor de organisatie. Politiemedewerkers worden buitengesloten, waardoor zij eigen regie verliezen. Begeleiders kunnen de voortgang van de medewerkers niet goed monitoren. Management beschikt niet over de mogelijkheid trends te signaleren

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Front-end Developer - Juniorfunctie

Functie omschrijving Ben jij op zoek naar een uitdagende baan als front-end developer, in een informele werksfeer, waar jij echt het verschil kan maken? Wil jij graag werken voor een bedrijf dat sportiviteit en een open communicatie, hoog in het vaandel heeft staan? Dan hebben wij de perfecte vacature voor je! Voor een klein bedrijf in Rijen dat gespecialiseerd is in het omzetten van digitale woningtekeningen naar managementinformatie, zijn wij per direct op zoek naar een allround front-end developer. Jouw werkzaamheden zien er als volgt uit: Ja gaat nauw samenwerken met de back-end developer. De database structuur is volledig gebouwd

Bekijk vacature »
Henk van Loo

Henk van Loo

26/01/2016 09:54:41
Quote Anchor link
Beste Mensen,

Ik heb sinds een half jaar een eigen PHP Session Handler Class geschreven.
Deze logt mij op random momenten uit, Het ene moment kan ik 2 uur zonder problemen werken op de site, het ander moment logt hij mij uit na de 2e klik binnen 1 minuut.

Als ik in de database kijk naar de laatste "view" tijd, dan staat deze wel goed ingesteld, de sessie is dus wel uitgelezen.
Hieronder mijn class:

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
<?php
    class CSessionHandler implements SessionHandlerInterface
    {
        public static $SessionID = NULL;
        public static $iSessionLifetime = 3600; // 30 minuten

        public function __construct ( )
        {

            if ( is_numeric ( SYSTEM::GetSetting ( 'sysSessionLifetime' ) ) )
            {

                self::$iSessionLifetime = SYSTEM::GetSetting ( 'sysSessionLifetime' );
            }


            if ( ! session_set_save_handler ( $this ) )
            {
                new
CLog ( 9009, 'Unable to implement our CSessionHandler. Please track the issue and fix this.' );
                return;
            }

            
            ini_set ( 'session.gc_maxlifetime', self::$iSessionLifetime ); // expires in 30 minutes
            ini_set ( 'session.cookie_lifetime', self::$iSessionLifetime ); // 30 minutes
            ini_set ( 'session.save_path', dirname ( dirname ( __DIR__ ) ) . '/sessions' );
            session_set_cookie_params ( self::$iSessionLifetime );
            session_start ( );
        }

        
        public function open ( $sSavePath, $sSessionName )
        {

            // No need to open DB connection. (called at "session_start ( );")
            return true;
        }

        
        public function close ( )
        {

            // No need to close DB connection.
            $this->gc(); // Linux doesn't call the clean function, but uses a cronjob to delete session files.
            return true;
        }

        
        public function read ( $sSessionID )
        {

            
            $oQuery = DB::Query ( "SELECT SessionValue FROM Sessions WHERE SessionID = ? AND TIMESTAMPDIFF(SECOND, SessionTime, NOW()) <= " . self::$iSessionLifetime, $sSessionID );
            
            if ( DB::Num ( $oQuery ) > 0 )
            {

                DB::Query ( "UPDATE Sessions SET SessionTime = NOW() WHERE SessionID = ?", $sSessionID );
                
                $aFetch = DB::Fetch ( $oQuery );
                
                return $aFetch['SessionValue'];
            }

            
            return ''; // Session not set, return empty string. IMPORTANT!
        }
        
        public function write ( $sSessionID, $sSessionValue )
        {

            $oQuery = DB::Query ( "SELECT SessionID FROM Sessions WHERE SessionID = ?", $sSessionID );
            
            if ( DB::Num ( $oQuery ) > 0 )
            {

                DB::Query ( "UPDATE Sessions SET SessionTime = NOW(), SessionValue = ? WHERE SessionID = ?", $sSessionValue, $sSessionID );
                
                return true;
            }

            
            DB::Query ( "INSERT INTO Sessions (SessionID, SessionValue) VALUES (?,?)", $sSessionID, $sSessionValue );
            return true;
        }

        
        public function destroy ( $sSessionID )
        {

            DB::Query ( "DELETE FROM Sessions WHERE SessionID = ?", $sSessionID );
            
            return true;
        }

        
        public function gc ( $iSessionLifetime = null )
        {

            DB::Query ( "DELETE FROM Sessions WHERE TIMESTAMPDIFF(SECOND, SessionTime, NOW()) > " . self::$iSessionLifetime );
            
            return true;
        }


        public static function GetActiveUserSessions ( )
        {

            $oQuery = DB::Query ( "SELECT * FROM Sessions WHERE SessionValue LIKE '%userID%' AND TIMESTAMPDIFF(SECOND, SessionTime, NOW()) < " . self::$iSessionLifetime . " GROUP BY SessionID" );

            return DB::Num ( $oQuery );
        }
    }

?>


Zoals jullie zien heb ik al diverse pogingen gedaan via ini_set, maar helaas.
Bij het deactiveren van deze class werkt alles weer naar behoren.

Zien jullie waar het probleem zit?
Gewijzigd op 26/01/2016 09:56:45 door Henk van Loo
 
PHP hulp

PHP hulp

27/12/2024 15:43:14
 
E vH

E vH

26/01/2016 12:21:17
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2016 14:40:32
Quote Anchor link
Ook stel je geen pad in in session_set_cookie_params(). Dan is mogelijk de sessie (of liever gezegd het sessie-cookie) alleen geldig in de huidige URL-directory. Maakt je site toevallig gebruik van zoekmachine-vriendelijke URL's? Dan zit je al snel in een andere "directory".

Daarnaast het volgende: de webserver waarop deze code actief is, is dit een Windows platform of iets anders? Volgens mij was er iets op Windows platformen waarbij sessies eerder als "verlopen" aangezien worden door de garbage collector omdat er op deze platformen er enkel zoiets is (of was, wellicht is dit inmiddels veranderd) als een modificatietijd, en niet (zoals op Unix/linux platformen) een accesstijd. Oftewel, op een Windows platform wordt het opvragen van een sessie-bestand niet geregistreerd waardoor deze, of deze nu actief is of niet, altijd op een vast moment vanaf zijn creatie verloopt. Een manier om dit (op Windows platformen) tegen te gaan is bijvoorbeeld het wegschrijven van een bitje zodat de modificatietijd elke "access" een schop krijgt.

EDIT, bijvoorbeeld zoiets, in zijn simpelste vorm:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// aanname: bij creatie van de sessie krijgt dit veld een initiële waarde (1 of 0)
$_SESSION['pingpong'] = 1 - $_SESSION['pingpong']; // flip de waarde
?>


Maar omdat je timeouts zo grillig verlopen is er mogelijk meer of iets anders aan de hand.

@Elmar vH: mogelijk zit je in de goede richting, maar het helpt om die informatie hier nogmaals te herhalen zodat iemand het zoekwerk niet nogmaals hoeft te doen en dat de informatie ook behouden blijft mocht de externe bron(nen) komen te vervallen.
Gewijzigd op 26/01/2016 14:43:41 door Thomas van den Heuvel
 
Henk van Loo

Henk van Loo

30/01/2016 11:39:26
Quote Anchor link
Bedankt voor jullie reacties, ik heb geen tijd gehad om eerder te reageren, excuses.
Ik zal jullie opmerkingen verwerken in het systeem, ik zal de uitkomst laten weten.

Het script draaide eerst op Windows, alleen deze voerde mijn Cronjobs (via de task scheduler) ineens niet meer goed uit waardoor ik weer terug gegaan ben naar mijn oude vertrouwde Linux server.

Bedankt.

Toevoeging op 30/01/2016 12:25:53:

De sessie cookie wordt nu aangepast, dit heb ik gecontroleerd. Dit was inderdaad eerder niet het geval, ik zal het eens aankijken vandaag.

Daarnaast werk ik inderdaad met SEO vriendelijke URLs, de cookies werden inderdaad geset op /portal. Ik heb dit aangepast zodat ze nu '/' als path hebben. Wat dom dat ik daar niet op gelet heb.

Uiteraard had ik zelf ook al gezocht, maar als je niet weet waar de fout zit is het zoeken een uitdaging.
 
Henk van Loo

Henk van Loo

01/02/2016 18:26:35
Quote Anchor link
Dank u wel heren. Alles lijkt te functioneren!
 



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.