Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在数据库中存储会话,然后在登录后调用它,在php中注销时销毁它_Php_Database_Session_Handler_Store - Fatal编程技术网

如何在数据库中存储会话,然后在登录后调用它,在php中注销时销毁它

如何在数据库中存储会话,然后在登录后调用它,在php中注销时销毁它,php,database,session,handler,store,Php,Database,Session,Handler,Store,我的代码将会话毫无问题地存储在数据库中,但我不知道如何从数据库调用它,以及如何在用户注销时销毁它 我的页面的工作方式如下: 要登录,用户可以访问域-xxx.xxxx.com 如果登录正确,则会将其重定向到另一个域-yyy.com 我不知道如何在登录后从域yyyy.com调用会话 存储会话的我的代码: 文件名-MySQLDatabase.class.php <?php include("Config.inc.php"); class MySQLDatabase{ private $db; p

我的代码将会话毫无问题地存储在数据库中,但我不知道如何从数据库调用它,以及如何在用户注销时销毁它

我的页面的工作方式如下:

要登录,用户可以访问域-xxx.xxxx.com 如果登录正确,则会将其重定向到另一个域-yyy.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);
  }

 }
 ?>
    <?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);
}

}
?>
文件名-DatabaseSessionHandler.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);
  }

 }
 ?>
    <?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);
}

}
?>
上面的代码可以正常工作,但我不知道如何调用存储在数据库中的会话

我不知道如何调用存储在数据库中的会话

您最好的资源是详细阅读此页:。您应该更改DatabaseSessionHandler类,使其实现SessionHandlerInterface,然后调用会话\设置\保存\处理程序。示例在页面上

一旦设置好,数据库中的会话将自动创建和销毁

要登录,用户将转到域-xxx.xxxx.com。如果登录正确,则会将用户重定向到另一个域-yyy.com

我不知道如何在登录后从域yyyy.com调用会话

在正常的用例中,您不能真正做到这一点,因为会话与cookie绑定,cookie不会从一个站点传播到另一个站点。因此,您必须将会话ID存储在URL中。有关如何执行此操作的更多信息,请阅读本页: