February 28, 2016

Drupal错误:session_destroy() session callback expects true......

在点击用户退出的时候,会显示如下的错误:

  • Warning:session_destroy():Session callback expects true/false return value在user_logout()…
  • Warning:session_destroy():Session object destruction failed在user_logout()…

6
这个问题是因为PHP7新语法不同引起的,Drupal官方的反馈中有这个问题的解决:https://www.drupal.org/node/2638016
主要修改/includes/session.inc文件。下面的代码中,有“+”号标识的部分表示新增代码,有“-”号标识的部分为删除的代码

diff --git a/includes/session.inc b/includes/session.inc<br></br>
--- a/session.inc 2015-10-22 06:17:40.000000000 +1030<br></br>
+++ b/session.inc 2015-12-19 17:25:11.000000000 +1030<br></br>
@@ -163,7 +163,7 @@<br></br>
try {<br></br>
if (!drupal_save_session()) {<br></br>
// We don't have anything to do if we are not allowed to save the session.<br></br>
-      return;<br></br>
+      return TRUE;<br></br>
}<br></br>
// Check whether $_SESSION has been changed in this request.<br></br>
@@ -271,6 +271,7 @@<br></br>
}<br></br>
}<br></br>
date_default_timezone_set(drupal_get_user_timezone());<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -292,6 +293,7 @@<br></br>
$_SESSION += $session_data;<br></br>
}<br></br>
}<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -304,7 +306,7 @@<br></br>
if (!drupal_save_session()) {<br></br>
// We don't have anything to do if we are not allowed to save the session.<br></br>
-    return;<br></br>
+    return TRUE;<br></br>
}<br></br>
if (empty($user->uid) && empty($_SESSION)) {<br></br>
@@ -329,6 +331,7 @@<br></br>
// Write the session data.<br></br>
session_write_close();<br></br>
}<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -351,7 +354,7 @@<br></br>
global $user, $is_https;<br></br>
// Nothing to do if we are not allowed to change the session.<br></br>
if (!drupal_save_session()) {<br></br>
-    return;<br></br>
+    return TRUE;<br></br>
}<br></br>
if ($is_https && variable_get('https', FALSE)) {<br></br>
@@ -410,6 +413,7 @@<br></br>
$user = $account;<br></br>
}<br></br>
date_default_timezone_set(drupal_get_user_timezone());<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -425,7 +429,7 @@<br></br>
// Nothing to do if we are not allowed to change the session.<br></br>
if (!drupal_save_session()) {<br></br>
-    return;<br></br>
+    return TRUE;<br></br>
}<br></br>
// Delete session data.<br></br>
@@ -446,6 +450,7 @@<br></br>
elseif (variable_get('https', FALSE)) {<br></br>
_drupal_session_delete_cookie('S' . session_name(), TRUE);<br></br>
}<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -466,6 +471,7 @@<br></br>
setcookie($name, '', REQUEST_TIME - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);<br></br>
unset($_COOKIE[$name]);<br></br>
}<br></br>
+  return TRUE;<br></br>
}<br></br>
/**<br></br>
@@ -477,7 +483,7 @@<br></br>
function drupal_session_destroy_uid($uid) {<br></br>
// Nothing to do if we are not allowed to change the session.<br></br>
if (!drupal_save_session()) {<br></br>
-    return;<br></br>
+    return TRUE;<br></br>
}<br></br>
db_delete('sessions')```
  
 已经修改好的文件,直接覆盖即可。  
 百度网盘:http://pan.baidu.com/s/1mhpWQj2