0

私はここでこの質問を検索しました..しかし、私は正しい答えを得ることができません...だから、私の質問を読んで、私に答えてください...ありがとうございます..

-------------- Session.php ------------------------

<?php
class WSession
{
    function __construct() {
    }

    function sess_open($sess_path, $sess_name) {
        return true;
    }

    function sess_close() {
        return true;
    }

    function sess_read($sess_id) {
        mysql_connect("test", "test", "test");
    mysql_select_db("test");
        $result = mysql_query("SELECT Data FROM sessions WHERE SessionID = '$sess_id';");
        if (!mysql_num_rows($result)) {
            //Session found, pull out data field value
            $sess_Data = $results->data;

            $CurrentTime = time();
            mysql_query("INSERT INTO sessions (SessionID, DateTouched) VALUES ('$sess_id', $CurrentTime);");
            return $sess_Data;
        } else {
            $CurrentTime = time();
            extract(mysql_fetch_array($result), EXTR_PREFIX_ALL, 'sess');
            mysql_query("UPDATE sessions SET DateTouched = $CurrentTime WHERE SessionID = '$sess_id';");
            return "";
        }
    }

    function sess_write($sess_id, $data) {
        mysql_connect("test", "test", "test");
    mysql_select_db("test");        
        $CurrentTime = time();
        mysql_query("UPDATE sessions SET Data = '$data', DateTouched = $CurrentTime WHERE SessionID = '$sess_id';");
        return true;
    }

    function sess_destroy($sess_id) {
        mysql_connect("test", "test", "test");
    mysql_select_db("test");        
        mysql_query("DELETE FROM sessions WHERE SessionID = '$sess_id';");
        return true;
    }

    function sess_gc($sess_maxlifetime) {
        mysql_connect("test", "test", "test");
    mysql_select_db("test");        
        $CurrentTime = time();
        mysql_query("DELETE FROM sessions WHERE DateTouched + $sess_maxlifetime < $CurrentTime;");
        return true;
    }
}
?>

------------------- Index.php ---------(MAIN FILE)----------------

require_once(session.php);

$handler = new WSession();
session_set_save_handler(array($handler, "sess_open"),
                         array($handler, "sess_close"),
                         array($handler, "sess_read"),
                         array($handler, "sess_write"),
                         array($handler, "sess_destroy"),
                         array($handler, "sess_gc"));

register_shutdown_function('session_write_close');

session_start();

$_SESSION['test']   = "testado";

これに続いて、ログインコントローラー(例:login.php)を呼び出しています。

---------------------- login.php ----------------------

リダイレクト後、ここでは保存ハンドラを使用してセッションを保存しようとしています。

$_SESSION['username'] = "XXXXXX";

$_SESSION['testing'] = "XXXXXX";

しかし、上記の値をDBに書き込んでいません。


メインファイルにある最初のデータのみを保存し、

test|s:9:"testado";

他の値も保存するようにガイドしてください。

4

1 に答える 1

0

私は同様のことを達成しようとしています。しかし、私は PDO を使用しており、クラス Session のコンストラクターで session_set_save_handler を呼び出します。

この簡単なチュートリアルをご覧ください http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/

$_SESSION に何かを設定する前に、login.php でセッションが実行されていることを確認してください。

于 2013-03-14T08:28:45.350 に答える