Ну, мой код без проблем сохраняет сеанс в базе данных, но я не понимаю, как вызвать его из базы данных и как его уничтожить, когда пользователь выходит из системы
Моя страница работает так:
Для входа пользователь идет, например, в домен —- 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);
}
}
?>
Приведенный выше код работает без проблем, но я не знаю, как вызвать сеанс, хранящийся в базе данных …
Я не знаю, как вызвать сеанс, хранящийся в базе данных …
Ваш лучший ресурс, чтобы прочитать эту страницу подробно: 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
Других решений пока нет …