PHP Custom Session Handler не работает на некоторых доменах - PullRequest
0 голосов
/ 11 марта 2019

У нас есть несколько качественных доменов с одинаковой кодовой базой. Мы переходим от использования встроенного обработчика сеанса PHP к пользовательскому обработчику сеанса, записывающему данные сеанса в MySQL. В некоторых доменах обработка сеанса нарушена, поскольку данные сеанса, записанные в базу данных, повреждены.

Сначала мы подумали, что это может быть связано с разными уровнями PHP в разных доменах. Однако мы исключили это, поскольку один домен, где он не работает, имеет тот же уровень PHP, что и домен, в котором он работает.

Этот вопрос кажется похожим на вопрос Пользовательский обработчик сеансов не работает на PHP5.6, но работает на PHP7 . Однако в нашем случае проблема не решается путем добавления session_write_close ().

Вот некоторые отладочные данные из двух разных экземпляров, которые ясно показывают, что происходит. В каждом случае сначала отображается print_r из $ _SESSION, а затем содержимое данных сеанса, которые будут записаны в базу данных:

На первом домене, обозначенном как "локальный":

Перед записью - данные сеанса через print_r:

Array ([debug] => Array ([0] => Идентификатор сеанса e2104hafmvtur2rsof78m918gs) [scr_width] => 2560 [Recent_page_view_history] => Массив ([0] => / [1] => / [2] = > / [3] => / [4] => / [5] => /) [my_user_label_full] => Независимый торговый представитель [my_user_label_short] => Rep [opp_user_type_id] => 2 [opp_user_label_full] => Руководитель [opp_user_label_long] => Новая Линия [opp_user_label_long_seo] => Независимые сбытовые компании и Новая Линия [opp_user_label_short] => Принципал [user_value_stmt] => Экспертиза отрасли [opp_user_value_stmt] => Возможность продажи [with_or_as] => в качестве независимого торгового представителя. Это руководство для независимого торгового представителя. Данное руководство для независимого торгового представителя. эти представители помогут вам понять, как стать лучшим представителем. [is_help_open] => 1 [referrer] => / [IE_warning_given] => 1 [link_mode] => 0 [isTouchScreen] => 0 [dynamicInputWording] => балл ваш курсор на [dynamicInputWordingCapitalized] => Наведите курсор на [devicePixelRatio] => 2)

Перед записью - данные передаются в пользовательский обработчик сеанса. Write ():

debug | a: 1: {i: 0; s: 37: «Идентификатор сеанса e2104hafmvtur2rsof78m918gs»;} scr_width | s: 4: «2560»; недавняя_страница_вид_истории | a: 6: {i: 0; s: 1: "/"; я: 1; s: 1: "/"; я: 2; s: 1: "/"; я: 3; s: 1: "/"; я: 4; s: 1: "/ "; i: 5; s: 1:" / ";} my_user_label_full | s: 21:" Независимый торговый представитель "; my_user_label_short | s: 3:" Rep "; opp_user_type_id | i: 2; opp_user_label_full | s: 9:" Принципал "; opp_user_label_long | s: 8:" Новая Линия "; opp_user_label_long_seo | s: 42:" Независимые торговые компании и Новая Линия "; opp_user_label_short | s: 9:" Принципал "; user_value_stmt | s: 18:" Экспертиза отрасли "; opp_user_value_stmt | s: 17: «Возможности продаж»; with_or_as | s: 117: «в качестве независимого торгового представителя. Это руководство для компаний, которые нанимают торговых представителей, поможет вам понять, как стать лучшим представителем»; is_help_open | b: 1; referrer | s: 1: "/"; IE_warning_given | b: 1; link_mode | i: 0; isTouchScreen | s: 1: "0"; dynamicInputWording | s: 20: "навести курсор на"; dynamicInputWordingCapitalized | s: 20 : "Наведите курсор на"; devicePixelRatio | s: 1: "2";

Вышеуказанное выглядит, как и ожидалось, и веб-сайт работает нормально.

На втором домене, обозначенном как "dev":

Перед записью - данные сеанса через print_r:

Array ([debug] => Array ([0] => Идентификатор сеанса v301fcrls9ijktjtlc7n4gd3n5) [scr_width] => 2560 [Recent_page_view_history] => Массив ([0] => /landing-page.php [1] =>/landing-page.php [2] => /landing-page.php [3] => /landing-page.php [4] => /landing-page.php [5] => /landing-page.php) [my_user_label_full] => Principal [my_user_label_short] => Principal [opp_user_type_id] => 1 [opp_user_label_full] => Independent Sales Rep [opp_user_label_long] => Sales Rep [opp_user_label_long_seo] => Independent Sales Rep [opp_user_label_short] => Rep [user_value_stmt] => Возможность продажи [opp_user_value_stmt] => Экспертиза отрасли [with_or_as] => с независимыми торговыми агентами. [Is_help_open] => 1 [referrer] => /landing-page.php [IE_warning_given] => 1 [link_mode] =>0 [isTouchScreen] => 0 [dynamicInputWording] => наведите курсор на [dynamicInputWordingCapitalized] => Наведите курсор на [devicePixelRatio] => 2 [site_user_type] => 2 [lp_source] => register-external)

перед тем как написать - дата прошло в пользовательской сессии обработчика записи ():

1030 * pQkKjjiuhsxKkLD5bG1pcvfRiU073NotPwuYW3TrIAEwiKACrZ1s6dbIQmOeo7430UQAYgu_GENi_KhZx4vSUdaV4iXmSOVxNZgoNC_7-xDzOMDdRo7zp3sk-_aEv3XyenNiNtcy5GkE7UH1O1qKG-WBXel7bDNJ6hVUaadz9DoBwzhHFid5O5TOBT9gccwzAab2DWN-sa4vjwSDwaQ03rxquQT07iv4T_BQPvB2_pLYB_fz7GSI470o-bePEb4N209gd3oUA4xlg0Hw4pCssCN6FO6vtamNzaTqXDpS-f9nGhxpALp1eUZ1ts9nzbAZQ_llj0XbOW3FtnmnargZjbigJBWvL5XmD_bg5yIZwCHxJ4w8CWrKjasjfuInLMmzi02ViEtjmxtCZ5kLMETjE42MOSRuqrK7wr6zZFEha3gK2wfzQvrIwbr3ZEQTOpzBinYggiECiLAkpH4qy6XTjgnc-RT4_r4L7_LD2rBtXKjm3gNJgjZeLjeUMZubXBcLVGiW1ELuLgq0zHmU6ppIAMhk1rkThOMq3qgyQ0rsJGauTPDrImWzbbbnBgbooYywscjZjf-KNoRyCEaZRFga1zEeQWheEYFO7miVXFi-BSZZYJfXFHuto-kcfV9yZHInlz9p1Lcgd0YpbVUeIwZb2MUPhhzASDUnu4uuy_iVUn6WsyuEciQVYhEDcLBYJ6zHlSTs46vOWJdjE19LR8HQQL5jKJZBJpeC_jqgTNDWsVC5B1hZKpFswDZnOrUgEKOS9rHfusYOw0Ydczhr67TBTzCVUZvJVbm77LgBuY-JuLCv2Yv6mMCltXohtxMhb5t6PMXTnQTsinJD_SdY0YQZbAo26iPlO3u690IJd2tncPFZavwcflKodm_KW0LLtUR4CX4MZ0tmqY0qB1lkW8qgri6aZKAvgurr9BZhZcNqcsnAb6Po7zLdZOtwM3KF51LBzbcxGiDG6yWUy_9nw9p_y9GadXbfhfFbmR5jTQsaJLxR2-Y_2TiMxhgkWu7G2Buv6IZqUD-dCvU9vXQTnyUhlVijsO1pP02IxqtyO4D8cGp4k8l7IxeuqxsbX2oj7IdhiYIwG5t5IfEKTOQiimjPV0jSsBhwIftD5U-ofwpEQjcd7MLrzm7iX3eZuFnVvvNsMg_TCOScvs4b0DhV46KdDLfdD4WMoVhI6QnFH4s7jiqI9TYQNLRqSZNqO1cdFGHSyLcT1qGpDpZn0-ljpV_nzrYDXe6d2fsejqBZs_aWAZQFFJ7qMwUzVX53dzLgTf3ziAzPwPayQl8NBd8VptIKiVLZfN1v0tofRPuNXXVUd2s. 1032 * Как вы можете видеть, а не специальной сериализованном версии данных, он становится запутанным в некотором роде.И обработка сеанса нарушена.

В домене, обозначенном как "qa", вывод идентичен "local".Обратите внимание, что у «local» есть php 7.1, а у «dev» и «qa» - php 5.6.Файлы php.ini для всех трех доменов имеют одинаковые настройки для сессии. * Переменные.

Вопрос: что является причиной запутывания данных сеанса?

1 Ответ

0 голосов
/ 19 марта 2019

Мы нашли решение. Дело в том, что Suhosin был включен в некоторых доменах, но не в других. Suhosin автоматически шифрует данные сеанса.

Мы будем терять Suhosin по мере продвижения вперед, так как он не является неотъемлемой частью PHP 7+. Либо is недоступен, либо не компилируется должным образом.

...