У меня есть 2 веб-сайта php на одной машине. Первый сайт (устаревшая система) имеет базовую аутентификацию: проверяет, установлено ли $_SESSION['user_id']
. Я работаю над вторым сайтом (основанным на Kohana 3.1), который расширит функциональность первого. Оба сайта будут связаны друг с другом, поэтому мне нужно разделить сеанс между этими системами. Оба сайта используют одну и ту же базу данных. Пользователи будут логиниться на первом сайте. На моем сайте есть код, который обнаруживает $_SESSION['user_id']
первого, но у меня проблемы с сохранением сеанса с модулем Kohana-Auth.
Первый сайт (устаревший) проверяет сеанс следующим образом:
<?php
session_start();
if(empty($_SESSION['user_id']))header("Location: index.php?action=3");
... //more dark code
это во всех файлах php... много файлов.
На моем сайте Kohana есть контроллер, который перед любым действием проверяет сессию.
<?php
class My_Controller extends Controller_Template {
public function before() {
session_start();
$this->auth = Auth::instance();
if ($this->auth->logged_in()) {
//I have session in the second site... Do I have a session on the first one?
if (!isset($_SESSION['user_id']) || $_SESSION['user_id'] == "") {
//I have no session in the first site... I logout the user in my site
$controller = Request::current()->controller();
if ($controller != 'auth') {
Request::current()->redirect('auth/logout');
}
}
$this->user = ORM::factory('user', $this->auth->get_user()->id);
} else {
//I have no session in the second site... Do I have a session on the first one?
$user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
if (isset($user_id)) {
$user = Model_User::get_user($user_id);
if ($user->loaded()) {
//I have session in the first site... I login the user in my site
$this->auth->force_login($user);
$this->user = ORM::factory('user', $this->auth->get_user()->id);
}
}
if (!$this->auth->logged_in()) {
//I still have no session => redirect to login of the first site
//Request::current()->redirect(...);
echo Debug::vars("BUUUU");
}
}
}
}
Этот код близок к работе: я могу перейти с одного сайта на другой, и пользователь будет обнаружен... но я понял, что когда пользователь перемещается между различными действиями на моем сайте Kohana, счетчик "логинов" таблицы пользователей увеличивается. Это означает, что перед любым действием "$this->auth->logged_in()
" равно FALSE
... и это означает, что модуль Auth не сохраняет моего пользователя между действиями и каждый раз выполняет принудительный вход в систему.
Я не знаю, что я могу сделать.
Я хочу определить сеанс с первого сайта, но я не хочу входить в систему с каждым кликом.