Sesja PHP bez cookies

Czy istnieje sposób na zainicjowanie trwałej sesji w PHP bez umieszczania pliku cookie sesji? Czy istnieją inne sposoby utrzymywania sesji na różnych stronach, takie jak rozwiązanie oparte na adresie IP?

Mój powód, aby zapytać, jest to, że chociaż większość użytkowników ma ciasteczka na, Chcę zobaczyć, czy istnieje sposób na system logowania do pracy dla tych z nim wyłączony (chociaż myślę, że wyłączenie cookies jest po prostu niepotrzebna paranoja, osobiście).

Author: Delan Azabani, 2010-09-18

6 answers

Nie sądzę, aby to zbyt wiele, aby prosić użytkowników o włączenie plików cookie. Uważam, że to głupie, kiedy ludzie całkowicie je wyłączają.

W przeciwnym razie możesz ustawić session.use_only_cookies na "0", aby wymusić dodanie identyfikatora sesji do adresów URL w Twoim php. Podejście to ma jednak kilka zalet. Głównie utrzymanie stanu w adresie URL, w przeciwieństwie do nagłówka pliku Cookie. Jeśli użytkownik skopiuje i wklei adres URL strony, na której się znajduje, a ktoś inny kliknie na nią, obaj będą używając tej samej sesji.

<?php
     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();
 54
Author: PureForm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 06:58:16

Możesz ustawić wartość ini session.use_trans_sid Na true, aby aktywować dołączanie identyfikatora sesji do każdego adresu URL. Spójrz na to .

Ze względów bezpieczeństwa należy ograniczyć sesję do adresu IP, który utworzył sesję. Nie jest to jednak całkowicie bezpieczne, ponieważ ktoś z tym samym IP (na przykład za proxy) może ponownie użyć tej samej sesji.

 5
Author: halfdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-18 08:17:21

Możesz pracować z identyfikatorami sesji w adresach URL i wyłączać pliki cookie za pomocą:

ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
// IP check
if($_SESSION['ip_check'] != $_SERVER['REMOTE_ADDR']){
   session_regenerate_id();
   session_destroy();
   session_start();
}
$_SESSION['ip_check'] = $_SERVER['REMOTE_ADDR'];
// session stuff

Uwaga: używanie identyfikatorów sesji w adresach URL jest wysoce dyskwalifikujące. Adresy IP mogą się zmieniać podczas podróży z kartą bezprzewodową, a serwery proxy mają ten sam adres IP. Łatwo go złamać po kliknięciu "starego adresu URL" (ze starym identyfikatorem sesji).

Możesz być również zainteresowany stworzeniem własnej funkcji obsługi sesji(w połączeniu z bazą danych). Zignorujesz identyfikator sesji i powiązasz go na adres IP. (zobacz przykłady w http://php.net/manual/en/function.session-set-save-handler.php )

Bibliografia:

 3
Author: Lekensteyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-26 17:56:29

Możesz zapisać identyfikator sesji na IP w bazie danych:

Utwórz tabelę mysql z trzema polami: session_id, ip i unique temp key (dla zalogowanych użytkowników) lub dowolnym innym warunkiem. Następnie wyłącz sesyjne pliki cookie i use_trans_sid.

Następnie wykonaj kod do zarządzania zachowaniem sesji w oparciu o tę nową tabelę!

Po session_start() Zapisz session_id w tabeli, a następnie odbierz go z tabeli (przez IP i dowolny inny warunek), a następnie wywołaj

session_id($in_table_session_id);

Aby uzyskać więcej informacji i kompletny przewodnik patrz: https://gist.github.com/mimrahe/77415f4a9e238c313bbe8c42f8a6b7fe

 1
Author: T30,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 15:11:35

Można utworzyć rekord bazy danych lub plik tymczasowy i sprawdzić var $_SERVER względem żądania przy każdym załadowaniu strony. To ryzyko bezpieczeństwa, ale z wystarczającą ilością zmiennych (spójrz na listę tutaj) możesz czuć, że masz szansę na przejęcie do akceptowalnego poziomu; tylko Ty wiesz, jak bezpieczna musi być Twoja aplikacja.

 0
Author: gedq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 08:11:16

Gdybym chciał to zrobić, to dodałbym identyfikator sesji w kodzie HTML jako tag komentarza i użyłbym i skonfigurował kod PHP tak, aby używał tego identyfikatora sesji, który jest zawarty w kodzie HTML. Myślę, że bardziej istotne będzie zrobienie tego zamiast robienia tego z IP użytkownika lub dodawania identyfikatora sesji w adresie URL.

 0
Author: Aryan amish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 07:49:59