Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dostep do sesji na tym samym serwerze ale z innej domeny., jak przekaszac sesje ?
thornag
post
Post #1





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
hwao
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Jak nadajesz ciasteczko, to dajesz "gdzie ma byc one wazne".
Ustaw poprostu odpowiednie ciasteczko...
W php.ini masz wiecej info i tam musisz ustawic.
Go to the top of the page
+Quote Post
thornag
post
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@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 =


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
hwao
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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.
Go to the top of the page
+Quote Post
thornag
post
Post #5





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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

Ten post edytował thornag 14.07.2006, 12:44:23


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
hwao
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  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. ?>
Go to the top of the page
+Quote Post
thornag
post
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Dzieki wielkie. Zabieram sie do testow smile.gif

Dziala wielkie dzieki. Classa GPL ? biggrin.gif

Ten post edytował thornag 16.07.2006, 11:47:19


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
hwao
post
Post #8


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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
Go to the top of the page
+Quote Post
thornag
post
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował thornag 16.07.2006, 12:11:14


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
hwao
post
Post #10


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Może być

Tak 0 tak zadziała
Go to the top of the page
+Quote Post
thornag
post
Post #11





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował thornag 16.07.2006, 13:31:30


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
hwao
post
Post #12


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:52