原文地址http://ken.weiaai.com/455.html/comment-page-3#comments
項目使用框架爲:CodeIgniter
原本項目環境使用的是php5.6,在安裝了php7後,項目的session失效了,檢查原因,發現該框架的Libraries/Session/Session.php中的129行左右是這樣寫的:
<?php
if (isset($_COOKIE[$this->_config['cookie_name']]) && (! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-z]{40}$/', $_COOKIE[$this->_config['cookie_name']])))
{
unset($_COOKIE[$this->_config['cookie_name']]);
}
關鍵在於這句preg_match('/^[0-9a-z]{40}$/', $_COOKIE[$this->_config['cookie_name']])中的正則匹配範圍是40,而回頭我在phpinfo()裏面卻發現session.sid_length = 26.
所以,要麼去php.ini裏面將session_sid長度修改成與框架的長度一致,要麼在上述代碼裏面修改一下正則匹配的範圍,然後session就正常了。
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']] ) && !preg_match('/^[0-9a-z]{26}$/', $_COOKIE[$this->_config['cookie_name']] ))
)
)
{
unset($_COOKIE[$this->_config['cookie_name']]);
}