Start session ve skriptu mimo Nette session poškodí
- forkman
- Člen | 72
Začínám s Nette a nemůžu se vypořádat s jednou věcí. Integroval jsem si file manager třetí strany (Responsive filemanager) a ten si v konfiguraci nastartuje session a naplní ji svými proměnnými. To je všechno OK, ale jakmile se to stane, aplikace v nette mi hlásí:
Failed to decode session object. Session has been destroyed
Nejdřív jsem hledal problém v tom file manageru, ale udělá to i samotný skript, kde je pouze session_start();
Session jsem si před a po dumpoval a je lehce změněná. To samé jsem zkoušel na stejném serveru v jiném projektu s Nette 2.0.18 a tam je to OK. Kde by mohla být chyba? Dík
PHP 5.6.26
Tracy 2.4.6
Server Apache/2.2.15 (CentOS)
Nette Framework 2.4
- forkman
- Člen | 72
To jsem se snažil dohledat, ale zdá se, že chybu hodí přímo PHP, Nette skončí při pokusu nastartovat session při inicializaci Containeru.
Skonči to na:
Nette\Http\Session->start()
kde to doputuje až na:
Nette\Utils\Callback::invokeSafe('session_start', [], function ($message) use (&$e) {
88: $e = new Nette\InvalidStateException($message);
89: });
Laděnka ukazuje, že v $_SESSION není vůbec nic. Dal bych ji sem komplet, ale nechci to tady zaspamovat :-)
Děje se to prostě tak, že se přihlásím do backendu, spustím php skript mimo nette, kde je pouze „session_start()“ a dummp proměnné $_SESSION (ta vykazuje nějaký obsah) a jakmile se vrátím do Nette, vyskočí Laděnka s uvedenou chybou a když si dumpnu $_SESSION znovu, je to najednou prázdné pole.
- WellBloud
- Člen | 5
Mám podobný problém, taky používám Responsive Filemanager v kombinaci
s TinyMCE. Když si edituju článek a snažím se přes filemanagera vložit
obrázek, tak mi to taky
vyhodí Nette\InvalidStateException: Failed to decode session object. Session has been destroyed
Náhodou se vám to nepodařilo vyřešit?
- Isigarek
- Člen | 74
Mám podobný problém. Můj problém nastavá, když facebook extension, které jsem si vytvořil chce zjistit před tím než chce access token jestli už ho nemá v session (dělám long term access tokeny) a když to chce zjistit předem hned se bugne a vyhodí stejnou chybu.
Zkoušel jsem dokonce nepoužívat session z jádra (soubor vepsaný v neon.config) ale vzít session přímo z DI extension loadu a nic.
- WellBloud
- Člen | 5
No, problém se mi nedaří zreplikovat, ale vím, že tam pořád je :)
Povede se to vždycky na novém zařízení, který web ještě nenavštívilo.
Vždy na 1. pokus v normálním a pak v anonymním režimu to spadne, ale pak
už to jede jak má.
Budu ještě zkoumat a dám vědět až odhalím příčinu
- WellBloud
- Člen | 5
no příčinu jsem nezjistil, nicméně jsem upravil filemanagera tak, aby fungoval:
- upgradoval jsem http://www.responsivefilemanager.com na verzi 9.12.1
- ve
filemanager/upload.php
jsem opravil chybu, řádek 34:
<?php
// $fldr = rawurldecode(trim(strip_tags($_GET['fldr']),"/") ."/");
$fldr = rawurldecode(trim(strip_tags($_POST['fldr']),"/") ."/");
?>
- ve
filemanager/config/config.php
jsem se inspiroval tady a upravil (především zakomentovalsession_start
):
<?php
$container = require __DIR__ . '/../../../app/bootstrap.php';
$user = $container->getService('user');
$user->getStorage()->setNamespace(\App\AdminModule\Presenters\BasePresenter::USER_NAMESPACE);
if (!$user->isLoggedIn()) {
$httpResponse = $container->getService('httpResponse');
$httpResponse->redirect('/'); //redirect to homepage if user is not logged in
exit;
}
// if (session_id() == '') session_start();
$_SESSION['RF']["verify"] = "RESPONSIVEfilemanager";
?>