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

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

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

Для входа пользователь идет, например, в домен —- 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);
}

}
?>

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]