CodeIgniter 3.0.6 + PHP 7.1 Session失效問題解決

昨天試著把系統移植到PHP 7.1上執行看看,系統裝完瀏覽器一開能看到登入畫面,正高興著,結果就發現登入不進去,看起來像是Session方面的問題。

問題原因:

在 system/libraries/Session/Session.php:129

// Sanitize the cookie, because apparently PHP doesn't do that for userspace handlers
if (isset($_COOKIE[$this->_config['cookie_name']])
    && (
        ! is_string($_COOKIE[$this->_config['cookie_name']])
        OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
    )
)
{
    unset($_COOKIE[$this->_config['cookie_name']]);
}

這邊會檢查存在$_COOKIE的session id格式是否正確,剛好我現在的格式不符(你可以透過cookie值或是session_id()查看),所以這個cookie值就被清掉了,導致session值也取不出來。

解決方法1

然後找到官網上的說明(如下),原來session ID的長度現在是可以設定的,然後我修改php.ini把長度變更為40,還是不行。
** session.sid_length **
session.sid_length allows you to specify the length of session ID string. Session ID length can be between 22 to 256. The default is 32. If you need compatibility you may specify 32, 40, etc. Longer session ID is harder to guess. At least 32 chars is recommended.Compatibility Note: Use 32 for session.hash_func=0 (MD5) and session.hash_bits_per_character=4,session.hash_func=1 (SHA1) and session.hash_bits_per_character=6. Use 26 for session.hash_func=0 (MD5) and session.hash_bits_per_character=5. Use 22 for session.hash_func=0 (MD5) andsession.hash_bits_per_character=6. You must configure INI values to have at least 128 bits in session ID. Do not forget set appropriate value to session.sid_bits_per_character, otherwise you will have weaker session ID.

**Note**: This setting is introduced in PHP 7.1.0.

還有一個問題,看到修改後的session id雖然長度對了,但有a-f以外的字元,繼續找...

session.sid_bits_per_character
session.sid_per_character allows you to specify the number of bits in encoded session ID character. The possible values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", ","). The default is 4. The more bits results in stronger session ID. 5 is recommended value for most environments.

**Note**: This setting is introduced in PHP 7.1.0.

再把這個改為4,然後就可以了。

解決方法 2

回頭到Codeigniter的GitHub查,這問題在目前最新的版本(3.1.3)已經修改了,所以你也可以考慮把系統底層升級。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 11,789评论 3 64
  • 啊 http://www.jianshu.com/writer#/notebooks/14946179/notes...
    指如出剑阅读 3,587评论 0 0
  • 365极限挑战营(第6天) 2003年5月25日 晚上,起风了。我们和班里的一帮人去了高老大的租住房。零晨已过,为...
    娜就酱吧阅读 3,318评论 6 5
  • 有梦是好的 为了梦奔波为更好 因梦而强大是最好 人生得意之处不就是这样的吗!
    迷茫茫阅读 1,391评论 0 0
  • 双11这天,是我进入电商文案界三个月的日子。今天,则是历经4周的单休之后,第一个调休的假期,竟然发烧了。调侃自己是...
    七月的西瓜阅读 1,841评论 0 0

友情链接更多精彩内容