Как можно сохранить сеансы в базе данных, затем вызвать его после входа в систему и уничтожить при выходе из системы в php

0

Ну, мой код хранит сеанс в базе данных без проблем, но я не понимаю, как вызвать его из базы данных и как уничтожить его, когда пользователь выходит из системы

Моя страница работает так:

Для входа в систему пользователь отправляется, например, в домен ---- xxx.xxxx.com Если логин верен, он перенаправляет их в ДРУГОЙ домен ---- yyyy.com

Я не знаю, как вызвать сеанс из домена yyyy.com после входа в систему

Мой код для хранения сеанса:

Имя файла ---- MySQLDatabase.class.php

<?php
include("Config.inc.php");
class MySQLDatabase{
private $db;
private $hostname;
private $username;
private $password;
private $schema;

function __construct() {
    if(func_num_args() == 0){
        $this->hostname = conf_hostname;
        $this->username = conf_username;
        $this->password = conf_password;
        $this->schema = conf_schema;
    }
    else{
        $params = func_get_args();
        $this->hostname = $params[0];
        $this->username = $params[1];
        $this->password = $params[2];
        $this->schema = $params[3];
    }
    }

    private function open(){
    $this->db = mysql_connect($this->hostname, $this->username, $this-              >password) or die ('Error connecting to mysql');
    mysql_select_db($this->schema, $this->db);
   }

  public function executeQuery($query){
    $this->open();
      $results = mysql_query($query, $this->db) or die ("Error in query:      $query. ".mysql_error());
    return $results;
  }

  public function close(){
    mysql_close($this->db);
  }

 }
 ?>

Имя файла ---- DatabaseSessionHandler.class.php

    <?php
include_once ("MySQLDatabase.class.php");

class DatabaseSessionHandler {
private $db;

public function _open($save_path, $session_name) {
    $this -> db = new MySQLDatabase();
    return true;
}

public function _close() {
    $this -> db -> close();
}

function _read($id) {

    $id = mysql_real_escape_string($id);

    $query = "SELECT data
            FROM SESSION
            WHERE id = '$id'";

    if ($result = $this -> db -> executeQuery($query)) {
        if (mysql_num_rows($result)) {
            $record = mysql_fetch_assoc($result);
            return $record['data'];
        }
    }

    return '';
}

function _write($id, $data) {
    $access = time();

    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);
    $data = mysql_real_escape_string($data);

    $query = "REPLACE
            INTO SESSION
            VALUES ('$id', '$access', '$data')";

    return $this -> db -> executeQuery($query);
}

function _destroy($id) {

    $id = mysql_real_escape_string($id);

    $query = "DELETE
            FROM SESSION
            WHERE id = '$id'";

    return $this -> db -> executeQuery($query);
}

function _clean($max) {
    $old = time() - $max;
    $old = mysql_real_escape_string($old);

    $query = "DELETE
            FROM SESSION
            WHERE access < '$old'";

    return $this -> db -> executeQuery($query);
}

public function killUserSession($username){
    $query = "delete from SESSION where data like('%userID|s:%\"".       mysql_real_escape_string($username) ."%\";first_name|s:%')";
    $this->db->executeQuery($query);
}

}
?>

Код выше работает без проблем, но я не знаю, как вызвать сеанс, хранящийся в базе данных...

Теги:
database
handler
session
store

1 ответ

0

Я не знаю, как вызвать сеанс, хранящийся в базе данных...

Ваш лучший ресурс - это прочитать эту страницу в деталях: http://php.net/manual/en/class.sessionhandlerinterface.php. Вы должны изменить свой класс DatabaseSessionHandler, чтобы он реализовал SessionHandlerInterface, а затем вызвал session_set_save_handler(). Примеры приведены на странице.

После того, как вы установили это, сеансы в базе данных будут созданы и уничтожены для вас автоматически.

Для входа в систему пользователь отправляется, например, в домен ---- xxx.xxxx.com Если логин верен, он перенаправляет их в ДРУГОЙ домен ---- yyyy.com

Я не знаю, как вызвать сеанс из домена yyyy.com после входа в систему

Вы не можете сделать это в обычном случае, потому что сеансы привязаны к файлам cookie, которые не распространяются с сайта на сайт. Поэтому вам придется прибегнуть к сохранению идентификатора сеанса в URL-адресе. Для получения дополнительной информации о том, как это сделать, прочитайте эту страницу: http://php.net/manual/en/session.idpassing.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню