Har du problem med att din sessions-tabell i Drupal fylls upp?
Problemet har att göra med hur PHP/Drupal och Ubuntu hanterar s.k. sessioner. För varje inloggad besökare på din Drupal-sida så skapas en session. Den innhåller lite information om användaren så att Drupal kan identifera användaren.
PHP gör en rensning av alla gamla sessioner med jämna intervall beroende på lite olika omständigheter. När man använder Drupal så ”tar” Drupal över hanteringen av att rensa sessioner eftersom Drupal själv administrerar dom i en databas-tabell.
Så långt – inga problem.
Av en hel hög olika anledningar så beslutade Ubuntu/Debian sig för några år sedan att ersätta funktionen i PHP som rensar sessioner. I en standardinstallation stänger dom helt enkelt av funktionen i PHP och skapar ett cron-jobb istället. Problemet är bara att cron-jobbet inte vet något om hur Drupal hanterar sin sessioner. Resultatet blir att sessions-tabllen aldrig rensas!
Du kan kolla hur många sessioner du har sparat i din databas med:
mysql> SELECT count("id") AS sessions FROM drupal.sessions;
+----------+
| sessions |
+----------+
| 1802 |
+----------+
1 row in set (0.00 sec)
För att slå på möjligheten för PHP att säga till Drupal att rensa bort gamla sessioner så ändrar du enkelt på raden i /etc/php5/apache2/php.ini från:
;session.gc_probability = 1
till:
session.gc_probability = 1
Glöm inte att starta om apache2 sedan.
I nyare version av Ubuntu (från och med Lucid) så är beteendet ändrat igen till det ursprungliga. Om du har en Drupalanpassad VPS från oss så kan du enkelt följa antal sessioner med en graf. Som del av vår övervakning håller vi även koll på att antal sessioner inte skenar iväg.
(Tack för diskussionen Pelle@GoodOld).