Opracowałem aplikację internetową PHP, która używała sesji opartych na plikach cookie i wszystko działało bez zarzutu - dopóki nie zdałem sobie sprawy, że nie będzie działać w przeglądarkach z wyłączonymi plikami cookie stron trzecich (ponieważ skrypt zostanie załadowany w elemencie iframe na innej stronie/domenie).PHP - Zmiana identyfikatora sesji podczas korzystania z session.use_trans_sid
Postanowiłem więc przełączyć się na sesje oparte na adresach URL (które, jak przypuszczam, będą bezpieczne, ponieważ skrypt znajduje się w elemencie iframe, nie będzie widocznego adresu URL dla użytkownika, który mógłby udostępnić lub utworzyć zakładkę itp.).
Jednak z jakiegoś powodu, ponieważ przełączyłem się na sesje oparte na domenie, każda strona w mojej aplikacji internetowej używa innego identyfikatora sesji.
Oto mój kod ...
ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
ini_set("session.use_trans_sid", 1);
ini_set("session.cache_limiter", "");
session_start();
echo "<p>Session ID: " . session_id() . "</p>"; // Test output
... co jest pierwszą rzeczą, na miano na każdej stronie (bez wcześniejszego wyjścia, że jestem świadomy).
Pierwsza strona w mojej aplikacji internetowej zawiera formularz i widzę, że wymagana ukryte wejście ID sesji jest automatycznie dodawane do niej przez PHP:
<input type="hidden" name="PHPSESSID" value="m4jbeec47uplnf95ue2h244a02" />
Ale identyfikator sesji donosi następnej stronie (że forma przedkłada) jest
Session ID: iiovfkrf3hesj1um5orasv7it6
Ponadto, gdy załadować pierwszej strony https: // ( zamiast http: //), przesłanie formularza powoduje przeładowanie tej samej strony (zamiast ładowania następnej strony).
Co ja już próbowałem:
ini_set("session.cookie_secure", 0);
i
ini_set("session.cookie_secure", 1);
i
ini_set('session.gc_maxlifetime', 30 * 60); // expires in 30 minutes
i (na koniec skryptu)
session_write_close();
i usuwanie
ini_set("session.cache_limiter", "");
Od phpinfo()
:
session.auto_start Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path//
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies On On
session.use_only_cookies On On
session.use_strict_mode Off Off
session.use_trans_sid 0 0
pomysłów?
Podczas przesyłania formularza jest "iiovfkrf3hesj1um5orasv7it6" wartość posta z ''? – Kzy
Czy masz dostęp do pliku INI, czy jest on na współdzielonym hoście (np. W środowisku cPanel)? Próbowałem tych samych 4 wywołań do 'ini_set()' i moje wartości obciążenia z phpinfo() odzwierciedlają te (np. 'Session.use_trans_sid = 1') - Zastanawiam się, czy * ini_set() * może być wyłączone przez * disable_functions * .. –
@ ban-geoengineering - Niestety sytuacja nie jest dla mnie jasna, ale zakładam, że napisałeś kody ini w części nagłówka. Dwa wspomniane pliki mogą mieć wspólny nagłówek. Tak więc, przekierowując z 1 strony na 2, zmienia ona wartość sesji. Mogę się mylić, ale zakładam, że to jest problem. –