2009-08-07 16 views
5

Próbuję wysłać PHPSESSID za pośrednictwem zmiennej HTTP GET dla klienta bez plików cookie.Jak mogę wysłać PHPSESSID w adresie URL?

Widziałem to w różnych drupal implementacjach, gdzie ?PHPSESSIONID=123ABC jest dołączanie do każdego łącza, ale jak mogę to określić w PHP i czy istnieje sposób zmiany parametru GET tak, aby mógł być? Token = 123ABC, a nawet wysłane przez HTTP POST?

Standardowy stos LAMP, w ramach Zend Framework.

Dzięki!

+0

Nie należy umieszczać identyfikatora sesji w zmiennych GET, jest to zagrożenie bezpieczeństwa. Nie ma odpowiedniej przeglądarki, która nie obsługuje plików cookie. – stefanw

+2

stefanw - jest przeznaczony dla klienta bez plików cookie, zgodnie z opisem. – Sledge

Odpowiedz

7

Korzystanie cookie lub nie jest skonfigurowany przez tych opcji PHP:

Jeśli pierwszy z nich jest ustawiony, ciasteczka zostaną wykorzystane, jeśli to możliwe.
PHP powinno wykryć, czy pliki cookie są włączone czy nie, i używać ich tylko wtedy, gdy są obsługiwane przez klienta.


Aby umożliwić przekazywanie identyfikatora sesji przez GET zamiast ciasteczek, można aktywować session.use_trans_sid, który jest domyślnie wyłączony (co oznacza, że ​​przez defaut, ID sesji jest przekazywane tylko przez cookies - nigdy przez GET).

Należy jednak pamiętać, że po włączeniu tej opcji PHP przekaże identyfikator sesji przez GET przynajmniej na pierwszą stronę, na którą każdy użytkownik witryny wejdzie ... ponieważ nie będzie miał pliku cookie na początku, oraz jedynym sposobem sprawdzenia, czy obsługują pliki cookie, jest ustawienie jednego z nich i próba odczytania go na następnej stronie.
i użytkowników, którzy nie obsługują plików cookie, w tym wyszukiwarek bym chyba powiedzieć, że będzie miał identyfikator sesji - i to nie jest miłe :-(


A może chcesz również wziąć spojrzeć na session.name aby ustawić nazwę klucza (zestaw do celu „symboliczną” zamiast „PHPSESSID”, mam na myśli)


aby uzyskać więcej informacji, można spojrzeć na odcinku Session Handling podręcznika :-)

1

Możesz zmienić PHPSESSID używając session_name() lub session.name w swoim pliku php.ini (lub używając ini_set()).

Dla klientów bez plików cookie istnieje opcja php.ini - należy mieć świadomość, że może to powodować problemy - na przykład użytkownicy przekazują adresy URL z identyfikatorami sesji do siebie nawzajem lub wyszukiwarki pobierają takie adresy URL.

1

Robiąc to m anually:

if ($_REQUEST['token']) 
    session_id($_REQUEST['token']); 
session_start(); 

print("foo=".$_SESSION['foo']++."<br />". 
     "<a href={$PHP_SELF}?token=".session_id().">link</a><br />"); 
print("<form method=POST>". 
     "<input type=hidden name=token value=".session_id()." />". 
     "<input type=submit /></form>"); 
0
  1. Tworzenie strony logowania, użytkownik nie może się zalogować bez prawidłowego identyfikatora i hasła.
  2. Po zalogowaniu użytkownik przychodzi do domu, tutaj użytkownik może się wylogować i wraca na stronę logowania.
  3. Użytkownik nie może uzyskać dostępu do strony głównej bez przechodzenia przez stronę logowania.