[PHP] Session na več domenah hkrati
11 naročnikov
11 naročnikov
Pozdravljeni,
zanima me ena zadeva. Kako omogočiti, da če se uporabnik prijavi na eni domeni, da je hkrati prijavljen na drugih domenah? Najboljša rešitev je pomoje cookie, pa je tudi najbolj varnejša?
Gre se za to, da uporabnik z enim profilom lahko dostopa do večih aplikacijah na različnih domenah.
12 odgovorov
cookie je omejen na domeno, torej če ga postaviš na eno, ga z nobene druge ne boš mogel brati. Predlagam, da uporabiš kakšen openID.
Kaj pa če bi vstavil hidden iframe? Druga ideja ki mi pride na misel pa je, da uporabnika redirektaš na osnovno stran, kjer preveriš ali je logiran, in iz tam takoj nazaj.
openID ne pride v poštev. kako pa session shranjuješ v skupni tabeli? a se session ne spremeni, če odpreš več različnih domen?
Eden izmed odgovorov če malo pogooglaš (http://stackoverflow.com/questions/511541/sharing-session-across-domain):
What you need is a single sign on service. You could roll you own for your sites A..Y by having a centralised site Z to manage the sessions/sign on.
user arrives in site A, doesn't present any session id
site A redirects user to site Z
site Z creates a session, perhaps after authenticating the user, and drops a site Z cookie, redirects user back to site A with a URL which contains an additional payload telling site A what the users session id is
site A drops a session cookie allow the user to continue to use their shared session on A
Now when the user goes to site Bsite B sees no session, redirects to site Z
site Z sees it's already got a session for this person, directs them straight back to B with the session id payload
site B drop a session cookie, it's all good again.
To put it another way, your signal sign on service gives the user something that they can hang to (a session cookie) and also something they can pass to the participating site to prove they are authenticated.
Jaz ne bi uporabljal nobenih redirectov ampak bi naredil svoj session system.
Imas tabelo sessions, kjer hranis notri podatke(datum, cas, ip, ...)
In potem samo preveris IPje in to je to.
Lahko seveda dodas tudi prave sessione, da reduciras uporabo MySQL...
jurij123:
Jaz ne bi uporabljal nobenih redirectov ampak bi naredil svoj session system.Imas tabelo sessions, kjer hranis notri podatke(datum, cas, ip, ...)
In potem samo preveris IPje in to je to.
Lahko seveda dodas tudi prave sessione, da reduciras uporabo MySQL...
tudi jaz bi to tko rešil, lep primer na http://www.tonymarston.net/php-mysql/session-handler.html
samo ni mi jasno kaj misliš s temi "pravimi sessionmi"? pač shraniš vse v bazo, če bo pa performance problem (kar dvomim) pa uporabš kj bolj naprednega mogoče cache..
Samo za to vseeno rabiš cookie? Kako boš pa ločil različne kompe v nat-u = isti wan ip. Razen IPja in user agent IDja ne vem po čem bi še lahko identificiral uporabnika.
Tako da v cookie moraš vseeno vpisati session id. Cookie pa je omejen na host domeno (poddomene lahko uporabljajo isti cookie).
? :)