Hook_init () вызывает проблемы входа в систему

drupal.stackexchange https://drupal.stackexchange.com/questions/3113

  •  16-10-2019
  •  | 
  •  

Вопрос

Я создал пользовательский модуль, который имеет следующее hook_init() реализация.

function gate_init() {
  $curr_uri = check_plain(request_uri());
  if (strpos($curr_uri, 'admin') === FALSE) {
    if (strcmp($curr_uri, '/gate') != 0) {  
      if (!sess_read(GATE_SESSION_NAME)) {
        if (!isset($_COOKIE[GATE_COOKIE_NAME])) {
          drupal_goto('gate');
        }
        else {
          sess_write(GATE_SESSION_NAME, TRUE);
        }
      }
    }
    else {
      if (sess_read(GATE_SESSION_NAME) || isset($_COOKIE[GATE_COOKIE_NAME])) {
        if (!sess_read(GATE_SESSION_NAME)) {
          sess_write(GATE_SESSION_NAME, TRUE);
        }
        drupal_goto('/');
      }
    }
  } 
}

Это безумие, но этот код вызывает проблемы входа в систему для аутентифицированных пользователей. Я не могу войти в систему, я не вижу ошибок, я просто не могу войти в систему, если я предоставлю правильное имя пользователя и пароль.

Если я прокомментирую эти строки, я могу войти в систему.

if (!sess_read(GATE_SESSION_NAME)) {
  if (!isset($_COOKIE[GATE_COOKIE_NAME])) {
    drupal_goto('gate');
  }
  else {
    sess_write(GATE_SESSION_NAME, TRUE);
  }
}

Я проверяю дальше и if (!sess_read(GATE_SESSION_NAME)) это часть, вызывающая проблемы входа в систему. Кто -нибудь может дать мне совет?

Это было полезно?

Решение

sess_read () не следует использовать в модуле, так как эта функция передается в session_set_save_handler () из _drupal_bootstrap (), которая является функцией, которая называется во время начальной загрузки Drupal.
Цель функции - не считывать значения из сеанса PHP; Если вам нужно это сделать, вы можете просто прочитать контент из $_SESSION[].
Чтобы заметить это session_start () вызывается из Drupal во время начальной загрузки; Это означает, что после полной начальной загрузки (или любой начальной загрузки, которая проходит мимо DRUPAL_BOOTSTRAP_SESSION фаза) сеанс инициализируется, и $_SESSION[] может быть использован.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top