Waarom is 1 dag te veel? Het is een backend applicatie die altijd open staat. Als ze twee uur van hun bureau weg zijn geweest en er belt een klant dan is het niet fijn als ze eerst opnieuw moeten inloggen als snel iets willen opzoeken. Ik zou het eventueel kunnen terugdraaien naar 8 of 10 uur.DJMaze schreef op donderdag 22 november 2018 @ 17:05:
[...]
1 dag is echt veel te veel.
Sessie cookies zijn standaard maar 24 minuten geldig (bij inactiviteit of sluiten van de browser).
Stap over op een andere sessie storage (database, memcache, etc.) en zorg voor meer beveiliging, dan is je probleem hoogstwaarschijnlijk opeens weg.
Zeker wanneer in je PATH_SESSION meer dan 1000 bestanden staan.
Ik snap dat ik code kan aanpassen om het probleem op te lossen. Waarschijnlijk ga ik dit nu ook doen, maar de oorzaak van het probleem blijft dan altijd een raadsel.
PATH_SESSION (/home/app/cache/sessions/) bevat nu 55 files waarvan de oudste van vanmorgen half 7. Dus die GC werkt prima.
Het probleem is inderdaad nog niet verholpen. Afgelopen vrijdag weer 2 incidenten.
Sinds anderhalve week log ik alle HTTP request in een database. Daarin zie je heel duidelijk wat er gebeurt:

User A (rood) en User B (groen) zitten beide tegelijk in het systeem, van de een op de andere klik (blauwe regels) heeft User A ineens hetzelfde sessieid als User B gekregen en zijn ze als dezelfde persoon ingelogd. Ze zitten beide op een andere locatie met een ander IP en de sessietijd van User A was niet verlopen.
Ik heb dit nu aangepast. De reden voor de session_write_close() direct na session_start() is zodat meerdere ajax-calls niet op elkaar blijven wachten omdat het sessie bestand geopend is door een ander script. Behalve bij het inloggen en uitloggen worden nergens sessie's weggeschreven.rutgerw schreef op donderdag 22 november 2018 @ 19:52:
[...]
Zonder dat ik een verklaring heb zou ik in elk geval deze dingen aanpassen:
- Die runtime ini_sets voor de session handler weghalen. Gewoon de standaardinstellingen gebruiken
- De session_write_close() calls weghalen (onnodige schrijfacties, session_write_close() wordt sowieso wel aangeroepen, geen noodzaak om dat expliciet te doen)
- 1 en niet meer dan 1 session_start()
Voor de rest is het behoorlijk vaag. De kans dat twee users dezelfde sessie toegewezen krijgen is zo goed als 0, zeker met die aantallen users waar jij mee te maken hebt. Zelfs al heb je twee verschillende applicaties die dezelfde sessie storage gebruiken, dan nog is de kans erg klein.
Als je die ini-sets weg hebt, zou je dan eens je volledige sessie configuratie kunnen posten zoals phpinfo() die geeft?
Hierbij de sessie configuratie:
Session Support enabled Registered save handlers files user Registered serializer handlers php_serialize php php_binary wddx Directive Local Value Master Value session.auto_start Off Off session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_httponly Off Off session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.gc_divisor 0 0 session.gc_maxlifetime 1440 1440 session.gc_probability 0 0 session.lazy_write On On session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /var/cpanel/php/sessions/ea-php71 /var/cpanel/php/sessions/ea-php71 session.serialize_handler php php session.sid_bits_per_character 4 4 session.sid_length 32 32 session.upload_progress.cleanup On On session.upload_progress.enabled On On session.upload_progress.freq 1% 1% session.upload_progress.min_freq 1 1 session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefix upload_progress_ upload_progress_ session.use_cookies On On session.use_only_cookies On On session.use_strict_mode Off Off session.use_trans_sid 0 0
[ Voor 0% gewijzigd door RickyHeijnen op 26-11-2018 13:51 . Reden: spelfout ]

