Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dostep do sesji na tym samym serwerze ale z innej domeny.
Forum PHP.pl > Forum > PHP
thornag
Witam

Po przeczytaniu manuala i przyznam ze pobierznym przejrzeniu komentarzy na php.net postanowilem przeszukac forum. Po 6 stronie wynikow ztrezygnowalem smile.gif Otoz problem jest nastepujacy. Majac plik
file.php w ktorym to nastepuje logowanie uzytkownika i rejestrowanie sesji jak uczynic tak aby sesja dostepna byla w pliku file2.php biorac pod uwage ze do pliku file2 dostejemy sie z calkowicie innego adresu URL.

Zilustrowac moze to przyklad ze pod domena www.serwis.pl mamy nasz serwis. Tutaj uzytkownik sie loguje. Przeglada nowe wiadomosci po czym, zamienia adres na nastepujacy (to samo okno przegkladarki) www.forum.pl . No i problem polega na tym, ze skoro uzytkownicy serwis i forum to te same konta, chcialbym uniknac podwojnego logowania. Jak wiec przekazac zmienne sesji z www.serwis.pl do www.forum.pl (oba serwisy na tym samym serwerze, zmiana domen nie wchodzi w gre, musz abyc rozne)

pozdrawiam
hwao
Jak nadajesz ciasteczko, to dajesz "gdzie ma byc one wazne".
Ustaw poprostu odpowiednie ciasteczko...
W php.ini masz wiecej info i tam musisz ustawic.
thornag
@hwao

W php.ini wpis znalazlem.

Nastepne pytanie brzmi jak wstawic tam wiecej niz jedna domene ? Nie chcialbym zeby po zmianie wszystko polecialo smile.gif
Kod
; The domain for which the cookie is valid.
session.cookie_domain =
hwao
Hm...
http://pl2.php.net/setcookie

Komentarze.

Nie wiem czy nie pomoglo by wpisanie ip serwera

Chociaz znalazlem cos takiego
Cytat
No. Cookies are domain specific and cannot be shared between domains.


Proponuje rozwiazanie takie
  1. <?php
  2. function _setCookie( ... ) { // takie samo api
  3. setCookie( 1, na 1 domene );
  4. setCookie( 2, na 2 domene );
  5. }?>

Teraz tylko zamienic wszyskie setCookie na _setCookie i cieszyc sie ze dziala smile.gif

Tu masz ciekawa rozmowe
http://www.codecomments.com/archive227-2006-4-891999.html

Jeżeli to sesje, to musisz napisac skrypt ktory odczytuje SESSION ID i przepisuje go odrazu przez COOKIE na 2 domene.
thornag
Cytat(hwao @ 14.07.2006, 09:58 ) *


Probowalem ustawic session_set_cookie_params(0, '/', '.com') ale takze nie pomoglo smile.gif

To sesja nie tylko wysylanie cookies, a spodziewam sie ze nie moge wymusic na mechanizmie sesji zeby korzystal z mojego setcookie zamiast wlasnego.

Przyznam tez ze rozwiazania z SESSION ID nie kumam zabardzo smile.gif
hwao
  1. <?php
  2.  
  3. error_reporting( E_ALL | E_STRICT );
  4.  
  5. /**
  6.  * MultiDomainCookie
  7.  * 
  8.  * Klasa odpowiedzialna za rozsyłanie ciastekczek na parę domen,
  9.  * dzięki temu, będą one ważne na różnych domenach.
  10.  * 
  11.  * @author Paweł `hwao` Halicki
  12.  * @version 0.0.9
  13.  */
  14. class MultiDomainCookie {
  15. private $aDomains = array();
  16. private $sDomain = null;
  17.  
  18. public $iCookieExpires = 2678400; // 31 days
  19.  
  20. /**
  21.  * MultiDomainCookie::__construct()
  22.  * 
  23.  * @param array $aDomains gdzie maja byc widoczne cookie
  24.  * @param string $sDomain na ktorej domenie jesteś teraz
  25.  */
  26. public function __construct( $aDomains, $sDomain ) {
  27. $this->aDomains = $aDomains;
  28. $this->sDomain = $sDomain;
  29. }
  30.  
  31. /**
  32.  * MultiDomainCookie::Relocation()
  33.  * 
  34.  * Wszystkie cookie, które funkcjonują na tej domenie
  35.  * zostana przepisane na reszte
  36.  * 
  37.  */
  38. public function Relocation() {
  39. foreach( $_COOKIE As $sCookieName => $sCookieValue ) {
  40. foreach( $this->aDomains As $sDomain ) {
  41. if( $sDomain != $this->sDomain ) {
  42. setCookie( $sCookieName, $sCookieValue, time()+$this->iCookieExpires, '', $sDomain );
  43. }
  44. }
  45. }
  46. }
  47.  
  48. /**
  49.  * MultiDomainCookie::set()
  50.  * 
  51.  * Ustawianie cookie na kazda domene
  52.  * Api zgodne z setCookie(), ale podawanie $sPath i $sDomain jest ignorowane
  53.  * 
  54.  * @param string $sName
  55.  * @param string $sValue
  56.  * @param integer $iExpires
  57.  * @param string $sPath
  58.  * @param string $sDomain
  59.  * @param string $sSecure
  60.  */
  61. public function set( $sName, $sValue = null, $iExpires = -1, $sPath = null, $sDomain = null, $sSecure = false ) {
  62. $iExpires = ( $iExpires == -) ? time()+$this->iCookieExpires : $iExpires;
  63.  
  64. foreach( $this->aDomains As $_sDomain ) {
  65. setCookie( $sName, $sValue, $iExpires, $sPath, $_sDomain, $sSecure );
  66. }
  67. }
  68.  
  69. /**
  70.  * MultiDomainCookie::delete()
  71.  * 
  72.  * Usuwanie cookie ze wszystkich domen
  73.  *
  74.  * @param string $sName
  75.  * @param string $sValue
  76.  * @param integer $iExpires
  77.  * @param string $sPath
  78.  * @param string $sDomain
  79.  * @param string $sSecure
  80.  */
  81. public function Delete( $sName, $sValue = null, $iExpires = -1, $sPath = '', $sDomain = null, $sSecure = false ) {
  82. $iExpires = $iExpires == -1 ? time()-$this->iCookieExpires : $iExpires;
  83.  
  84. foreach( $this->aDomains As $_sDomain ) {
  85. setCookie( $sName, $sValue, $iExpires, $sPath, $_sDomain, $sSecure );
  86. }
  87. }
  88.  
  89. /**
  90.  * MultiDomainCookie::deleteAll()
  91.  * 
  92.  * Usuwanie wszyskich ciasteczek z domenie (które funckjonuja na tej domenie);
  93.  *
  94.  */
  95. public function DeleteAll() {
  96. foreach( $_COOKIE As $sCookieName => $sCookieValue ) {
  97. $this->Delete( $sName, null, -);
  98. }
  99. }
  100.  
  101.  
  102. }
  103.  
  104. // Lista domene, na których maja byc ciasteczka
  105. // Ustawienie .example.com powoduje ze cookie dziala
  106. // zarowno na test.example.com jak i dev.example.com jak i na samym example.com/www.example.com
  107. $aDomains = array(
  108. 'hwao.be',
  109. 'php.pl',
  110. 'forum.php.pl',
  111. );
  112.  
  113. // Pobieram sobie z server domene na której jest teraz user.
  114. $sDomain = 'hwao.be'; // ja na szybko :) w $_SERVER to masz
  115.  
  116. // Tworzymy obiekt :)
  117. $MDCookie = new MultiDomainCookie( $aDomains, $sDomain );
  118.  
  119. // Wszyskie cookie jakie są na hwao.be, zostaną przepisane na reszte domen
  120. $MDCookie->Relocation();
  121.  
  122. // Te ciasteczko powinno byc widoczne na kazdej domenie
  123. $MDCookie->set( 'hwao', 'test', time()+3600 );
  124.  
  125. // Usuniecie ciacha
  126. $MDCookie->delete( 'hwao', 'test', time()+3600 );
  127.  
  128. // Usuwa wszyskie ciastka
  129. $MDCookie->deleteAll();
  130.  
  131. ?>

Powinno dzialac, zastosuj tylko
  1. <?php
  2. // Lista domene, na których maja byc ciasteczka
  3.  // Ustawienie .example.com powoduje ze cookie dziala
  4.  // zarowno na test.example.com jak i dev.example.com jak i na samym example.com/www.example.com
  5.  $aDomains = array(
  6.  'hwao.be',
  7.  'php.pl',
  8.  'forum.php.pl',
  9.  );
  10.  
  11.  // Pobieram sobie z server domene na której jest teraz user.
  12.  $sDomain = 'hwao.be'; // ja na szybko :) w $_SERVER to masz
  13.  
  14.  // Tworzymy obiekt :)
  15.  $MDCookie = new MultiDomainCookie( $aDomains, $sDomain );
  16.  
  17.  // Wszyskie cookie jakie są na hwao.be, zostaną przepisane na reszte domen
  18.  $MDCookie->Relocation();
  19. ?>
thornag
Dzieki wielkie. Zabieram sie do testow smile.gif

Dziala wielkie dzieki. Classa GPL ? biggrin.gif
hwao
Cytat(thornag @ 16.07.2006, 12:32 ) *
Dziala wielkie dzieki. Classa GPL ? biggrin.gif

OpenSource, dosłownie smile.gif tylko milo by bylo zostawic informacje o autorze winksmiley.jpg
thornag
Informacja bedzie, ale niestety tylko w dokumentacji. Moze byc ?

I jeszcze pytanie.

Ustawienie
Kod
public $iCookieExpires = 2678400; // 31 days


Na "0" spowoduje waznosc cookie do zamkniecia przegladarki ?
hwao
Może być

Tak 0 tak zadziała
thornag
Ehh.. niestety znow cos mi tu nie gra smile.gif

Na koncu pliku dodalem..
  1. <?php
  2. $aDomains = array("podooch.com", "myooch.com", "vodooch.com", "mobooch.com");
  3. $MDC = New MultiDomainCookie($aDomains, "podooch.com");
  4. $MDC->Relocation();
  5. ?>


Po zalogowaniu sie w domenie podooch.com zmienne sesyjne nie sa widoczne na e.g www.myooch.com/costam.

Dodam jeszcze jak probuje to zrobic uzywajac klasy.

Plik www.podooch.com/chris/ses.php5

  1. <?
  2. require("MDC.class.php5");
  3. $_SESSION['id'] = "BLA";
  4. echo "started<br> ses variable ".$_SESSION['id'];
  5.  
  6.  $aDomeny = array( "myooch.com", "podooch.com");
  7.  $new = New MultiDomainCookie($aDomeny, "podooch.com");
  8.  $new->Relocation();
  9. ?>


Plik www.myooch.com/chris/ses1.php5 <-- ten sam katalog troche inny plik i inna domena smile.gif Serwer tez ten sam smile.gif

  1. <?
  2. echo "ses variable: ".$_SESSION['id'];
  3. ?>
hwao
Wymiana kawalka klasy
  1. <?php
  2. public function Relocation( $sPath = null ) {
  3. foreach( $_COOKIE As $sCookieName => $sCookieValue ) {
  4. foreach( $this->aDomains As $sDomain ) {
  5. if( $sDomain != $this->sDomain ) {
  6. setCookie( $sCookieName, $sCookieValue, time()+$this->iCookieExpires, $sPath, $sDomain );
  7. }
  8. }
  9. }
  10. }
  11. ?>

I jak zrobisz
  1. <?php
  2. $new->Relocation( '/' );
  3. ?>

Mysle ze powinno zadzialac
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.