我们有几个具有相同代码库的质量域。我们正在从使用本机PHP会话处理程序转换为将会话数据写入MySQL的自定义会话处理程序。在某些域上,会话处理被破坏,因为写入数据库的会话数据已损坏。
起初,我们认为它可能与不同域上的不同PHP级别有关。但是,我们已将其排除在外,因为它无法正常工作的一个域与它正在正常工作的域具有相同的PHP级别。
这个问题似乎与 Custom Session Handler not working on PHP5.6 but does on PHP7。但是,在我们的情况下,通过添加session_write_close()无法解决该问题。
这是来自两个不同实例的一些调试输出,可以清楚地显示正在发生的事情。在每种情况下,首先显示$ _SESSION的print_r,然后显示会话数据的内容,因为它将被写入数据库:
在指定为“本地”的第一个域上:
在写入之前-通过print_r的会话数据:
Array([debug] => Array([0] =>会话ID e2104hafmvtur2rsof78m918gs)[scr_width] => 2560 [recent_page_view_history] => Array([0] => / [1] => / [2] = > / [3] => / [4] => / [5] => /)[my_user_label_full] =>独立销售代表[my_user_label_short] =>代表[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:“会话ID e2104hafmvtur2rsof78m918gs”;} scr_width | s:4:“ 2560”; recent_page_view_history | a:6:{i:0; s:1: “ /”; i:1; s:1:“ /”; i:2; s:1:“ /”; i:3; s:1:“ /”; i: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] =>会话ID v301fcrls9ijktjtlc7n4gd3n5)[scr_width] => 2560 [recent_page_view_history] => Array([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] =>委托人[my_user_label_short] =>委托人[opp_user_type_id] => 1 [opp_user_label_full] =>独立销售代表[opp_user_label_long] =>销售代表[opp_user_label_long_seo] =>独立销售代表[opp_user_value ] =>销售机会[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] =>外部寄存器
写之前-数据传递到自定义会话处理程序write():
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_y9GadXbfhfFbmR5jT QsaJLxR2-Y_2TiMxhgkWu7G2Buv6IZqUD-dCvU9vXQTnyUhlVijsO1pP02IxqtyO4D8cGp4k8l7IxeuqxsbX2oj7IdhiYIwG5t5IfEKTOQiimjPV0jSsBhwIftD5U-ofwpEQjcd7MLrzm7iX3eZuFnVvvNsMg_TCOScvs4b0DhV46KdDLfdD4WMoVhI6QnFH4s7jiqI9TYQNLRqSZNqO1cdFGHSyLcT1qGpDpZn0-ljpV_nzrYDXe6d2fsejqBZs_aWAZQFFJ7qMwUzVX53dzLgTf3ziAzPwPayQl8NBd8VptIKiVLZfN1v0tofRPuNXXVUd2s。
如您所见,它会以某种方式被混淆,而不是特殊的数据序列化版本。会话处理被破坏了。
在指定为“ qa”的域上,输出与“ local”相同。请注意,“本地”具有php 7.1,而“开发”和“ qa”均具有php 5.6。这三个域的php.ini文件的session。*变量设置都相同。
问题:会话数据混淆的原因是什么?
答案 0 :(得分:0)
我们找到了解决方案。 Suhosin是在某些域上启用的,而在其他域上则未启用。 Suhosin自动加密会话数据。
随着我们的前进,Suhosin将会失去,因为它似乎不是PHP 7+的组成部分。要么不可用,要么编译不正确。