ホームページ  >  記事  >  バックエンド開発  >  セッションストレージに関する問題

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

WBOY
WBOYオリジナル
2016-06-13 12:20:04971ブラウズ

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

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


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


しかし、ログイン ページを開くと、はセッションがありません。ログイン時に「最初にログインしてください」と表示されます。これは、SessionDBTool が初期化されていないことが原因であるはずです。しばらく見ても、どこを変更すればよいのかわかりません。助けてください。解決してください
-----解決策のアイデア----- -------
/* *
* セッションを初期化し、データベースに保存します
*/
protected function initSession(){
new SessionDBTool;
}


このコードは意味がありません
--- ---解決策のアイデア-------------------------- --
関数(メソッド)内で作成した変数(オブジェクト) ) は関数 (メソッド) の外部からはアクセスできません

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。