Sessions v databázi sqlite a jejich expirace a mazání

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oggy
Člen | 306
+
0
-

Řeším velký počet souborů sessions .. ukládám si je jinam než je dafult v php.ini, takže si nepotřebné soubory mažu cronem, ale pro zálohování na serveru je ten počet souborů stejně velký, takže chci sessions přesunout do databáze. Připadá mi jako vhodné a jednoduché řešení sqlite..ale mám jeden problém a dotaz.

config:

<?php
nette:
    session:
      autoStart: smart
      expiration: + 31 days
      save_handler: sqlite
      save_path: "%tempDir%/sessions"
?>

dost8ávám tento Warning

ini_set(): Cannot find save handler ‚sqlite‘

Je potřeba ještě něco nastavovat?

A jak je řešeno odmazávání expirovaných sessions? Nebo je potřeba také nějak např. přes cron?

David Ďurika
Člen | 328
+
0
-

no asi si budes musiet napisat vlastny session storage https://api.nette.org/…Storage.html

a potom ked ho napises tak by si ho mohol zverejnit, lebo onedlho budem nieco take potrebovat aj ja :)

Editoval achtan (1. 11. 2012 17:28)

Filip Procházka
Moderator | 4668
+
0
-

Do Sqlite bych to nedával.. Aplikace se bude zamykat nejenom na úrovni uživatele, ale úplně všech requestů. Co takhle raději zvážit redis?

Oggy
Člen | 306
+
0
-

HosipLan napsal(a):

Do Sqlite bych to nedával.. Aplikace se bude zamykat nejenom na úrovni uživatele, ale úplně všech requestů. Co takhle raději zvážit redis?

Díky, vypadá to jednoduše. Používáš to? Proč zrovna tohle řešení?

Jaké mám možnosti pro řešení problému s obrovským počtem souborů?
sqlite, říkáš ne.
memchached?
redis?
?

Editoval Oggy (1. 11. 2012 18:22)

Filip Procházka
Moderator | 4668
+
0
-

Redis je, jednoduše řečeno, memcache, která se umí průběžně ukládat na disk, aby se z něj obnovila (když se vypne mašina, nebo tak…). Plus umí nějaké další parádičky jako message queue atd.

enumag
Člen | 2118
+
0
-

@HosipLan: Kdybych to použil, jakým způsobem tu cache potom smažu když chci aby se vygenerovala nová? Při ukládání do souborů je to snadné, ale jak na to s jiným (např. tímto) storage? :-)

Filip Procházka
Moderator | 4668
+
0
-

Jednak můžeš použít nějakou konstantu (třeba hash z gitu), podle které se to bude invalidovat automaticky. Nebo se tam prostě připojíš a tu cache smažeš :) Můžeš si na to napsat shell/php script.

Oggy
Člen | 306
+
0
-

Máš nějakou ukázku využítí redis na session a jejich invalidaci? Jak používáš konstantu z gitu? Kdy?

Filip Procházka
Moderator | 4668
+
0
-

Zrovna session bych asi nemazal, když nahraju novou verzi webu :) U využití na session není moc co ukazovat. Zaregistruješ extension a do configu dáš

common:
    redis:
        session: on

Ale jinak invalidace konstantou viz třeba: https://api.nette.org/…ate.php.html#111

Patrik Votoček
Člen | 2221
+
0
-

HosipLan napsal(a):

Zrovna session bych asi nemazal, když nahraju novou verzi webu :)

Mazal bych jenom pokud se změní struktura dat tuším že na tohle má ale nette anotaci…

Oggy
Člen | 306
+
0
-

HosipLan napsal(a):

Zrovna session bych asi nemazal, když nahraju novou verzi webu :)

Nepsal jsem, že chci nahrávat novou verzi webu. Měl jsem na mysli, jak se starat o expirované sessions?

Filip Procházka
Moderator | 4668
+
0
-

Redis je maže sám (protože jim nastavuju expiraci).

Oggy
Člen | 306
+
0
-

Kde hledat chybu?

Kdyby\Extension\Redis\RedisClientException #111

Cannot connect to server: Connection refused

Filip Procházka
Moderator | 4668
+
0
-

Zkus se připojit pomocí redis-client, jestli ti redis vůbec funguje. Popř založ nové téma, ať to tu nespamujeme ;)

Oggy
Člen | 306
+
0
-

HosipLan napsal(a):

Zkus se připojit pomocí redis-client, jestli ti redis vůbec funguje. Popř založ nové téma, ať to tu nespamujeme ;)

Díky, už to jeden.. ale ještě 2 dotazy do db redis trvájí asi 120 000 ms ..ale to nějak pořeším. děkuji ti

Editoval Oggy (6. 11. 2012 10:53)