Jak přihlásit uživatele na subdoméně ze session non-nette projektu?

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

Potřebuji na projektu abc.example.com přihlásit uživatele, který je již prihlášen na example.com. Nastavil jsem tedy cookie_domain na .example.com a na subdoméně mám přístup k $_SESSION. Protože projekt example.com není Nette aplikace, ukládá userid přímo do $_SESSION. Pokud na subdoméně v Nette tuto session objevím, snažím se přilásit uživatele identitou:

if (!$this->user->isLoggedIn() && isset($_SESSION['iduser'])) {
    $identity = new \Nette\Security\Identity(
        $_SESSION['iduser'], $_SESSION['role']
    );
    $this->user->login($identity);
}

To se povede, pokud si za tento if dám výpis $this->user->isLoggedIn(), vrací TRUE.

Problém je v tom, že Nette zničí $_SESSION, takže uživatel je odhlášen na example.com. Nette možná odhalí nějaký potenciální podvrh, takže dokonce odhlásí i abc.example.com.

Nemá někdo řešení, které by fungovalo? Na fóru jsem našel různé problémy tohoto typu, které byl způsobeny zaseknutým prohlížečem, nebo Apachem, ale zkoušel jsem už 3 prohlížeče a restart Apache a nic.

Při zkoumání jsem v Nette\Security\User objevil volání $this->storage->setAuthenticated(TRUE);, které v Nette\Http\UserStorage setAuthenticated() zavolá $this->sessionHandler->regenerateId();. Pokud toto zakomentuji, problém se smazáním $_SESSION přetrvává, protože regenerateId() se volá i Nette\Http\Session start(), které se volá při každém nastartování sesssion.
Po zakomentování obsahu funkce Nette\Http\Session regenerateId() je vše ok, ale to je z bezpečnostního hlediska nereálné. Proto hledám nějaké funkční řešení.

Přijde mi, že toto už musel někdo vyřešit. Najde se někdo takový?:) Díky

bazo
Člen | 620
+
0
-

a nebude jednoduchsie si to upravit v tej druhej aplikacii? pripravit nette taku istu strukturu session ako ocakava