PHP сессии без cookies
есть ли способ, которым я могу инициировать постоянный сеанс в PHP без размещения файла cookie сеанса? Существуют ли другие способы поддержания сеанса между страницами, такие как решение на основе IP-адреса?
моя причина для запроса заключается в том, что, хотя у большинства пользователей есть куки, я хочу посмотреть, есть ли способ для системы входа в систему работать для тех, у кого она отключена (хотя я думаю, что отключение куки-файлов-это просто ненужная паранойя, лично).
6 ответов:
Я не думаю, что это слишком много, чтобы попросить пользователей, чтобы включить cookies. Я нахожу это глупым, когда люди полностью отключают их.
в противном случае, вы можете задать свой
session.use_only_cookiesдо "0", чтобы принудительно добавить идентификатор сеанса к URL-адресам в вашем php. Однако этот подход имеет несколько недостатков. В основном это сохранение состояния в URL-адресе, в отличие от заголовка Cookie. Если пользователь должен был скопировать и вставить URL-адрес страницы, на которой они были, и кто-то другой должен был нажать на нее, они бы оба будут использовать один и тот же сеанс.<?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();
вы можете установить ini-значение
session.use_trans_sidк true для активации добавления идентификатора сеанса к каждому URL. Взгляните на этой.в целях безопасности вы должны ограничить сеанс IP, который создал сеанс. Это не совсем безопасно, хотя, как кто-то с тем же IP (за прокси, например) может повторно использовать тот же самый сеанс.
вы можете работать с идентификаторами сеансов в URL-адресах и отключать файлы cookie с помощью:
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Примечание: использование идентификаторов сеансов в URL-адресах очень дискугировано. IP-адреса могут меняться при путешествии с беспроводной картой, а прокси-серверы имеют один и тот же IP-адрес. Он легко ломается при нажатии "старый URL" (со старым идентификатором сеанса).
вы также можете быть заинтересованы в создании собственной функции обработки сессии (в связке с базой данных). Вы бы проигнорировали идентификатор сеанса и привязать его к IP-адресу. (см. примеры в http://php.net/manual/en/function.session-set-save-handler.php)
ссылки:
вы можете сохранить идентификатор сеанса на IP в базе данных:
создайте таблицу mysql с тремя полями: session_id, ip и уникальный временный ключ (для зарегистрированных пользователей) или любое другое условие, которое вам нравится. Затем отключите сеансовые куки и use_trans_sid.
затем создайте код для управления поведением сеанса на основе этой новой таблицы!
после
session_start()сохранить session_id в таблице, а затем получить его из таблицы (по IP и любому другому условию) , а затем звонитеsession_id($in_table_session_id);для получения дополнительной информации и полного руководства см.:https://gist.github.com/mimrahe/77415f4a9e238c313bbe8c42f8a6b7fe
вы можете создать запись базы данных или временный файл и проверить
$_SERVERvars против запроса при каждой загрузке страницы. Это риск для безопасности, но с достаточным количеством переменных (посмотрите на список здесь) вы можете чувствовать, что вы получили шанс угона до приемлемого уровня; только вы знаете, как безопасно ваше приложение должно быть.
Если бы я хотел это сделать, я бы добавил идентификатор сеанса в HTML-код в качестве тега комментария и использовал и настраивал PHP-код для использования этого идентификатора сеанса, который включен в HTML-код. Я думаю, что будет более уместно сделать это вместо того, чтобы делать это с IP-адресом пользователя или добавлять идентификатор сеанса в URL-адрес.
Comments