Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

dwie sesje php rownoczesnie

114 views
Skip to first unread message

bagno

unread,
Apr 27, 2012, 2:33:28 PM4/27/12
to
Witam

Czy jest jakakolwiek możliwość rozróżnienia 2 okien (zakładek)
przeglądarki tak aby mieć równocześnie 2 sesje ? Nie mam możliwości
przekazywania czegokolwiek getem/postem

2 zakładki firefoxa łączą się z dokładnie tym samym adresem
i muszę mieć możliwość stwierdzenia na serwerze który z użytkowników
akurat wysłał do serwera jakieś żądanie.

Analizowałem już wszystkie możliwości z użyciem server side i client side
i doszedłem do wniosku że nie jest to możliwe ale jakaś
resztka nadziei pozostała.


Krzysztof Magosa

unread,
Apr 27, 2012, 2:38:54 PM4/27/12
to
W dniu 27.04.2012 20:33, bagno pisze:
Witam.

Moim zdaniem musisz coś doklejać do get/post.
Raczej nie znajdziesz innego wyjścia, bo serwer musi mieć info z której
zakładki przyszło żądanie by rozróżnić sesje.

Pozdrawiam.



bagno

unread,
Apr 27, 2012, 2:44:31 PM4/27/12
to

Użytkownik "Krzysztof Magosa" <krzy...@magosa.pl> napisał w wiadomości
news:jnep3q$8un$1...@news.task.gda.pl...
To jest oczywista oczywistość. Wygląda mi to na niewykonalne ale może
jest jakaś sztuczka.

Krzysztof Magosa

unread,
Apr 27, 2012, 2:51:21 PM4/27/12
to
W dniu 27.04.2012 20:44, bagno pisze:
> To jest oczywista oczywistość. Wygląda mi to na niewykonalne ale może
> jest jakaś sztuczka.

A dlaczego nie możesz doklejać nic do get/post?

Lemat

unread,
Apr 27, 2012, 4:38:32 PM4/27/12
to
numer sesji PHPSESSID jest trzymany w COOKIE, dlatego przeglądarka wysyła
jedno i to samo COOKIE w obu oknach/tabach.

Dlatego też potrzebny jest inny mechanizm przechowywania wartości niż
$_COOKIE

można inicjować numer sesji wyłącznie przez
session_id($_GET['numer_sesji']);

lub można to zrobić tak, że w jednym pliku sesji trzymać 2 sesje na raz:
$moja_sesja=$_SESSION[$_GET['ktora_sesja']];

--
Pozdrawiam
Lemat
Zanim zadasz pytanie: proszę o informację, jaka była przyczyna śmierci
Twojego ostatniego niewolnika.

Paweł Łaski

unread,
Apr 29, 2012, 2:27:14 PM4/29/12
to
Można ale nie z poziomu php tylko javascript'u, a nazywa się to sessionStorage http://www.w3schools.com/html5/html5_webstorage.asp

bagno

unread,
Apr 30, 2012, 4:16:59 AM4/30/12
to
Lemat wrote:
> bagno wrote:
>
>> Witam
>>
>> Czy jest jakakolwiek możliwość rozróżnienia 2 okien (zakładek)
>> przeglądarki tak aby mieć równocześnie 2 sesje ? Nie mam możliwości
>> przekazywania czegokolwiek getem/postem
>>
>
>
> numer sesji PHPSESSID jest trzymany w COOKIE, dlatego przeglądarka
> wysyła jedno i to samo COOKIE w obu oknach/tabach.
>
> Dlatego też potrzebny jest inny mechanizm przechowywania wartości niż
> $_COOKIE
>
> można inicjować numer sesji wyłącznie przez
> session_id($_GET['numer_sesji']);
>
> lub można to zrobić tak, że w jednym pliku sesji trzymać 2 sesje na
> raz: $moja_sesja=$_SESSION[$_GET['ktora_sesja']];

BEZ UŻYCIA GET/POST

bagno

unread,
Apr 30, 2012, 4:19:23 AM4/30/12
to
Fajne ale te dane muszą być dostępne po stronie serwera a tu
znowu takiej opcji nie ma.

Lemat

unread,
Apr 30, 2012, 6:34:51 AM4/30/12
to
uważaj, bo nie będe powtarzać: PHP przyjmuje wartości z zewnątrz (od
przegladarki) w postaci tablic $_GET, $_POST, $_COOKIE, $_SESSION, $_FILES,
$_SERVER

nie możesz użyć $_COOKIE, bo ono będzie identyczne w obu tabach
nie możesz użyć $_SESSION, bo jest zależne od $_COOKIE
wyeliminowałeś $_GET, $_POST
zostaje $_FILES, co by było raczej niespotykanym patentem
oraz $_SERVER. Tu masz do syspozycji takie rzeczy jak HTTP_HOST, REMOTE_ADDR
HTTP_REFERER, HTTP_USER_AGENT
Jakoś nie wyobrażam sobie abyś zmieniał IP lub User-Agenta przy każdym
przeładowaniu strony. możesz oprogramować HTTP_REFERER: do $_SESSION
zapisywać tablicę asocjacyjną, której kluczem jest aktualny URL strony i
podczas następnego wywołania pobierać zmienne z sesji używając klucza
wskazanego przez HTTP_REFERER. Sposób jest fajny dopóki w obu tabach nie
wejdziesz na ten sam URL. Potem się wszysko rozjebie.

Krzysztof Magosa

unread,
Apr 30, 2012, 7:58:07 AM4/30/12
to
W dniu 30.04.2012 10:19, bagno pisze:
> Fajne ale te dane muszą być dostępne po stronie serwera a tu
> znowu takiej opcji nie ma.

Wniosek?
Musisz mieć zmienną na podstawie której będziesz kluczował sesję.

I IMHO nie przeskoczysz tego.


bagno

unread,
Apr 30, 2012, 8:09:34 AM4/30/12
to

Użytkownik "Lemat" <#@lemat.priv.pl> napisał w wiadomości
news:4f9e6acb$0$1295$6578...@news.neostrada.pl...
> bagno wrote:
>
>> Lemat wrote:
>>> bagno wrote:
>>>
>>>> Witam
>>>>
>>>> Czy jest jakakolwiek możliwość rozróżnienia 2 okien (zakładek)
>>>> przeglądarki tak aby mieć równocześnie 2 sesje ? Nie mam możliwości
>>>> przekazywania czegokolwiek getem/postem
>>>>
>>>
>>>
>>> numer sesji PHPSESSID jest trzymany w COOKIE, dlatego przeglądarka
>>> wysyła jedno i to samo COOKIE w obu oknach/tabach.
>>>
>>> Dlatego też potrzebny jest inny mechanizm przechowywania wartości niż
>>> $_COOKIE
>>>
>>> można inicjować numer sesji wyłącznie przez
>>> session_id($_GET['numer_sesji']);
>>>
>>> lub można to zrobić tak, że w jednym pliku sesji trzymać 2 sesje na
>>> raz: $moja_sesja=$_SESSION[$_GET['ktora_sesja']];
>>
>> BEZ UŻYCIA GET/POST
>
> uważaj, bo nie będe powtarzać: PHP przyjmuje wartości z zewnątrz (od
> przegladarki) w postaci tablic $_GET, $_POST, $_COOKIE, $_SESSION,
> $_FILES,
> $_SERVER

Wiem co przyjmuje php

> nie możesz użyć $_COOKIE, bo ono będzie identyczne w obu tabach
> nie możesz użyć $_SESSION, bo jest zależne od $_COOKIE
> wyeliminowałeś $_GET, $_POST
> zostaje $_FILES, co by było raczej niespotykanym patentem

Tak jakby

> oraz $_SERVER. Tu masz do syspozycji takie rzeczy jak HTTP_HOST,
> REMOTE_ADDR
> HTTP_REFERER, HTTP_USER_AGENT
> Jakoś nie wyobrażam sobie abyś zmieniał IP lub User-Agenta przy każdym
> przeładowaniu strony. możesz oprogramować HTTP_REFERER: do $_SESSION
> zapisywać tablicę asocjacyjną, której kluczem jest aktualny URL strony i
> podczas następnego wywołania pobierać zmienne z sesji używając klucza
> wskazanego przez HTTP_REFERER. Sposób jest fajny dopóki w obu tabach nie
> wejdziesz na ten sam URL. Potem się wszysko rozjebie.

Jednym z założeń był identyczny URL. O tego typu rozwiązaniach też już
myślałem.

bagno

unread,
Apr 30, 2012, 8:17:10 AM4/30/12
to

Użytkownik "Krzysztof Magosa" <krzy...@magosa.pl> napisał w wiadomości
news:jnluod$88e$1...@news.task.gda.pl...
>W dniu 30.04.2012 10:19, bagno pisze:
>> Fajne ale te dane muszą być dostępne po stronie serwera a tu
>> znowu takiej opcji nie ma.
>
> Wniosek?
> Musisz mieć zmienną na podstawie której będziesz kluczował sesję.

No musze. Gdyby było coś co działa jak te SessionStorage (odrębny magazyn
danych dla każdej zakładki/okna) a równocześnie umożliwiało przesłanie
jakiejś
danej na serwer jak Cookie to by było super. W opisach pojawia się czesto
informacja, że SessionStorage dane do serwera przesyła tylko na żądanie. A
tu się
okazuje, że samo w sobie nie ma takiego mechanizmu i możesz to sobie jedynie
oprogramować korzystająć z get/post.

> I IMHO nie przeskoczysz tego.

Chyba nie.

Sergiusz Rozanski

unread,
Apr 30, 2012, 3:03:17 PM4/30/12
to
Dnia 30.04.2012 bagno <ba...@o2.pl> napisał/a:
>
> Jednym z założeń był identyczny URL. O tego typu rozwiązaniach też już
> myślałem.

Nie da rady, albo różne url (choćby na siłę, z parametrem sesji w każdym
odwołaniu do serwera) bo pozostałe rzeczy browser zawsze pośle takie same
z obu zakładek/okien. W środku w każdej zakładce będzie inny js, może jakaś
zmienna, jak ślesz wszystko jakimiś ajaxami to nie trudko dokleić do
wywołania 1 zmienną - ale nadal url.

Jak Ci się nie chce ciągnąć zmiennej przez URL to możesz np redirektować
hosta w przypadku wykrycia nowego okna/zakładki. Np 1 usługa i 100 poddomen
na to samo. Przy pierwszym wejściu np na gołą domenę robisz redirect na losowy
1 ze 100 i na tych wirtualkach otwierasz sesje, nowa zakładka wylosuje inny
host z prawdopodobieństwem 99/100, więc sporym.

Izaak Goldstein

unread,
May 1, 2012, 6:22:11 AM5/1/12
to
Cokolwiek próbujesz zrobić - robisz to źle. Prosisz się tylko o kłopoty.

--
Izaak

Paweł Łaski

unread,
May 1, 2012, 11:40:17 AM5/1/12
to
W dniu piątek, 27 kwietnia 2012 20:33:28 UTC+2 użytkownik bagno napisał:
SessionStorage > ajaxem latasz na serwer > informujesz o stanie użytkownika.

Albo SessionStorage > informujesz serwer ajaxem > przeładowanie strony

Krzysztof Szmergiel

unread,
May 1, 2012, 12:35:58 PM5/1/12
to
On 30/04/12 13:09, bagno wrote:

> Jednym z założeń był identyczny URL. O tego typu rozwiązaniach też już
> myślałem.

Jedynym sposobem jest javascript, ktory bedzie podmienial zwykle linki
na post z unikalnym numerem sesji. Numer generujesz raz np. na stronie
glownej. Wejscie drugim oknem przegladarki na strone glowna wygeneruje
nowy numer i wszystkie klikniecia beda uzywac juz nowej sesji.

Dodatkowo trzeba by sie zabezpieczyc na wypadek gdy javascript jest
wylaczony. Linki powinny dzialac bez tego, na jednej wspolnej sesji.

Pytanie tylko, czy gra jest warta swieczki.

Pozdrawiam
K.

Paweł Łaski

unread,
May 1, 2012, 1:21:22 PM5/1/12
to
W dniu piątek, 27 kwietnia 2012 20:33:28 UTC+2 użytkownik bagno napisał:
Może on robi grę :P

bagno

unread,
May 2, 2012, 1:46:13 AM5/2/12
to
Może on robi. Chociaż nie, on nie robi.

bagno

unread,
May 2, 2012, 1:49:29 AM5/2/12
to
Paweł Łaski wrote:
> W dniu piątek, 27 kwietnia 2012 20:33:28 UTC+2 użytkownik bagno
> napisał:

>> Analizowałem już wszystkie możliwości z użyciem server side i client
>> side i doszedłem do wniosku że nie jest to możliwe ale jakaś
>> resztka nadziei pozostała.
>
> SessionStorage > ajaxem latasz na serwer > informujesz o stanie
> użytkownika.
>
> Albo SessionStorage > informujesz serwer ajaxem > przeładowanie strony

Potrzebuje rozwiązania niezawodnego i realnego. To coś byłoby
conajmniej głupie.

bagno

unread,
May 2, 2012, 1:55:36 AM5/2/12
to
Krzysztof Szmergiel wrote:
> On 30/04/12 13:09, bagno wrote:
>
>> Jednym z założeń był identyczny URL. O tego typu rozwiązaniach też
>> już myślałem.
>
> Jedynym sposobem jest javascript, ktory bedzie podmienial zwykle linki
> na post z unikalnym numerem sesji.

Jak można podmienić link na post ? Chyba na get.

To chyba będzie jedyne realne rozwiązanie w moim przypadku.

Krzysztof Magosa

unread,
May 2, 2012, 4:36:39 AM5/2/12
to
W dniu 02.05.2012 07:55, bagno pisze:
Ja się cały czas zastanawiam z czym Ty masz problem.
Zrób sobie jakiś helper do generowania linków, dopinaj nim odpowiedni ID
sesji i tyle.

Paweł Łaski

unread,
May 3, 2012, 11:05:23 AM5/3/12
to
Przepraszam bardzo, że piszę o sposobie, który jest realny i niezawodny, jeżeli osoba spełnia warunki(99% włączony JS oraz w miarę dobrą przeglądarkę np: chrome,firefox,opera zaktualizowaną).
Powiem tak cookie też nie każdy używa.
Pozostaje ci POST i GET, choć POST też raczej nie.
Koniec tematu i bądź realny w swoich pomysłach, a nie zawiedziesz nikogo.

bagno

unread,
May 3, 2012, 11:29:20 AM5/3/12
to
Paweł Łaski wrote:
> W dniu środa, 2 maja 2012 07:49:29 UTC+2 użytkownik bagno napisał:
>> Paweł Łaski wrote:
>>> W dniu piątek, 27 kwietnia 2012 20:33:28 UTC+2 użytkownik bagno
>>> napisał:
>>
>>>> Analizowałem już wszystkie możliwości z użyciem server side i
>>>> client side i doszedłem do wniosku że nie jest to możliwe ale jakaś
>>>> resztka nadziei pozostała.
>>>
>>> SessionStorage > ajaxem latasz na serwer > informujesz o stanie
>>> użytkownika.
>>>
>>> Albo SessionStorage > informujesz serwer ajaxem > przeładowanie
>>> strony
>>
>> Potrzebuje rozwiązania niezawodnego i realnego. To coś byłoby
>> conajmniej głupie.
>
> Przepraszam bardzo, że piszę o sposobie, który jest realny i
> niezawodny, jeżeli osoba spełnia warunki(99% włączony JS oraz w miarę
> dobrą przeglądarkę np: chrome,firefox,opera zaktualizowaną).

Przeglądarka tu ma moim zdaniem mniejsze znaczenie chyba, że mówimy o IE w
wersji 5. Rozwiązanie
natomiast jest wybitnie dziwne i nie uwierze jeśli nie zobacze. Mówie to o
prawdziwym życiu
(opóźnienia internetu, od czasu do czasu jakiś niewyjaśniony błąd w
odpowiedzi na zapytania
ajax).

Może po prostu nie napisałem jasno : nie chodzi mi o rozwiązanie "za wszelką
cenę", to co robię
to troche sztuka dla sztuki ale ma działać dłużej niż 10 sekund w
laboratoryjnych warunkach.

> Powiem tak cookie też nie każdy używa.

A tego co robię ma używać 8 osób. Wszyscy mają firefoxa z włączonym cookies.
Ale nie chce
też się ograniczać do firefoxa bo to wsród tych "lepszych" przeglądarek
chyba najgorszy
wybór i z czasem wywale to dziadostwo w cholere.

> Pozostaje ci POST i GET, choć POST też raczej nie.

No chyba tak.

> Koniec tematu i bądź realny w swoich pomysłach, a nie zawiedziesz
> nikogo.

Z moich nierealnych pomysłów wyszło już pare fajnych rzeczy. Ale faktycznie
nie ma
sensu tego ciągnąć.

Krzysztof Szmergiel

unread,
May 4, 2012, 11:26:04 AM5/4/12
to
On 02/05/12 06:55, bagno wrote:

> Krzysztof Szmergiel wrote:

>> Jedynym sposobem jest javascript, ktory bedzie podmienial zwykle linki
>> na post z unikalnym numerem sesji.
>
> Jak można podmienić link na post ? Chyba na get.
>
> To chyba będzie jedyne realne rozwiązanie w moim przypadku.

Formularz gdzies na koncu kazdej strony:

<form action="#" id="postsessid" method="POST">
<input type="hidden" name="sessid" value="123456" />
</form>

Do tego javascript (jquery zeby bylo latwiej):

<script>
$('a').click(function (event) {
$('#postsessid').attr('action', $(event.target).attr('href'));
$('#postsessid').submit();
return false; // Nie uruchamiaj linka
});
</script>

Kod pisany z glowy. Nie sprawdzalem czy dziala.

Po stronie serwera sprawdzasz czy masz $_POST['sessid']. Jezeli nie to
tworzysz nowy unikalny id. Potem uzywasz go jako value w formularzu
powyzej. Dodatkowo inicjalizujesz sesje z tym numerem.

Pozdrawiam
K.
0 new messages