ホームページ > バックエンド開発 > PHPチュートリアル > セッションストレージに関する質問

セッションストレージに関する質問

WBOY
リリース: 2016-06-23 13:34:32
オリジナル
1053 人が閲覧しました

私はしばらく PHP を学習しており、MVC のアイデアに基づいてフレームワークを作成しようとしていますが、セッションをデータベースにインポートするときにいくつかの問題が発生しました。
これは SessionDBTool のコードです。 class.php ファイル:

<?phpclass SessionDBTool {    //MySQLDB类的对象    private $db;	public function __construct(){		//设置处理器方法		ini_set('session.save_handler', 'user');		session_set_save_handler(			array($this,'sess_open'),			array($this,'sess_close'),			array($this,'sess_read'),			array($this,'sess_write'),			array($this,'sess_destroy'),			array($this,'sess_gc')			);		//开启session		session_start();	}	public function sess_open(){        $this->db = MySQLDB::getInstance($GLOBALS['config']['database']);	}	public function sess_close(){        return true;	}	public function sess_read($sess_id){        $sql = "select sess_data from it_session where sess_id = '$sess_id'";        return (string)$this->db->fetchColumn($sql);    }	public function sess_write($sess_id,$sess_data){        $expire = time();        $sql = "insert into it_session values('$sess_id','$sess_data',$expire) on duplicate key update sess_data = '$sess_data',expire = $expire";        return $this->db->query($sql);	}	public function sess_destroy($sess_id){        $sql = "delete from it_session where sess_id = '$sess_id'";        return $this->db->query($sql);	}	public function sess_gc($ttl){        $last_time = time() - $ttl;        $sql = "delete from it_session where expire < $last_time";        return $this->db->query($sql);	}}?>
ログイン後にコピー


これはバックグラウンド コントローラーのクラス ファイル コード:
<?php/** * Created by PhpStorm. * User: DoubleJack * Date: 2015/5/13 * Time: 23:18 */    class BackPlatformController extends Controller {        /**         * 构造函数,使其自动checklogin()         */        public function __construct(){            //开启session            $this->initSession();            //验证是否登陆            $this->checkLogin();        }        /**         * 初始化session入库         */        protected function initSession(){           new SessionDBTool;        }        /**         * 验证当前用户是否登陆         */        protected function checkLogin(){            //判断是否登录            if(CONTROLLER=="admin" && (ACTION=="login" || ACTION=="signin")) {                //不需要            }else{                //需要                    if(isset($_SESSION['is_login']) && $_SESSION['is_login'] == 'YES'){                        //载入后台的模板                        require CURR_VIEW_DIR . 'index.html';                 //继续执行                }else{                    $this->jump('index.php?p=back&c=Admin&a=login','请先登录',2);                }            }        }    }
ログイン後にコピー


しかし、ログイン ページを開くと、ログイン時に「最初にログインしてください」と表示されるはずです。 SessionDBTool が初期化されていないことが原因で、私はそれを長い間調べてきましたが、どこを変更すればよいのかわかりません。解決してください。


に返信します。ディスカッション (解決策)

@xuzuning

//オープンセッション

new SessionDBTool; //この SessionDBTool オブジェクトはローカルではありませんか?
}
???


/ **

* /

関数 (メソッド) 内で作成された変数 (オブジェクト) は、関数 (メソッド) の外ではアクセスできません。

$this->pile = new SessionDBTool; などの持続可能なアクセス キャリアに保存する必要があります
それ以外の場合は、initSession が実行されます 終了後、オブジェクトは失われます




関数 (メソッド) は関数 (メソッド) の外部からアクセスできません
-$ This-& gt; のように、持続的にアクセス可能なキャリアに保存する必要があります
それ以外の場合は、initity の実装後、オブジェクトは利用できません。「ログイン」するように求められます


/ **

ProteCTED FUNINCTION Initivity ( ) {{
new SessionDBTool;

このコードは意味がありません



?

@lijpwsw @xuzuning

私のindexControllerがバックグラウンドコントローラークラスを継承していないことが分かりました

ちなみに

/**         * 初始化session入库         */        protected function initSession(){           new SessionDBTool;        }
ログイン後にコピー

はこのように書かれています 問題ありません
ありがとうございます!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート