セッションハンドラーを最初から作成したい。使いたくないsession_set_save_handler
。でもどこにも何も見つからず、どこから始めればいいのかわからない。誰かが私を正しい方向に向けたり、これを行うための最良の方法を説明したりできますか?
ありがとう!:)
独自のセッションメカニズムを構築しようとするときに注意すべき点がいくつかあります。
最初にできることは、PHPセッションラッパーを作成することです。PHPセッション機能をまとめるクラス。したがって、Sessionsを使用する場合は、セッションクラスをインスタンス化し、セッションで必要なことを実行できます。あなたはこのようなことをすることができます:
class Session
{
/**
* Starts new or resumes existing session
*
* @access public
* @return bool
*/
public function start()
{
if(session_start()) {
return true;
}
return false;
}
/**
* End existing session, destroy, unset and delete session cookie
*
* @access public
* @return void
*/
public function end()
{
if($this->status != true) {
$this->start();
}
session_destroy();
session_unset();
setcookie(session_name(), null, 0, "/");
}
/**
* Set new session item
*
* @access public
* @param mixed
* @param mixed
* @return mixed
*/
public function set($key, $value)
{
return $_SESSION[$key] = $value;
}
/**
* Checks if session key is already set
*
* @access public
* @param mixed - session key
* @return bool
*/
public function has($key)
{
if(isset($_SESSION[$key])) {
return true;
}
return false;
}
/**
* Get session item
*
* @access public
* @param mixed
* @return mixed
*/
public function get($key)
{
if(!isset($_SESSION[$key])) {
return false;
}
return $_SESSION[$key];
}
}
次に、このセッションクラスを次のように使用できます。
$session = new Session();
$session->start();
$session->set('id', 5);
echo $session->get('id);
オブジェクトのようにPHPセッションを使用でき、PHP関数を使用する必要がないため、これが気に入っています。ただし、とにかくPHP関数を使用していることに注意してください。このクラスを使用すると、PHP関数は表示されません。これを行うと、PHPセッションがどのように機能するかを深く理解するのに役立ちます。
弾丸を噛んで独自のセッションメカニズムを作成することにした場合、注意すべき点がいくつかあります。最初に決定する必要があるのは、セッション情報をどこに保存するかです。それらはデータベース、ファイルシステム、Cookieなどに保存できます。デフォルトでは、PHPはセッションをファイルシステムに保存します。独自のセッションメカニズムを作成する最も簡単な方法は、セッションをCookieに保存することです。Codeigniterセッションを使用する場合、Codeigniterはデフォルトでこれを行います。
独自のオブジェクトを作成します。このオブジェクトには、セッション配列の読み取り、書き込み、編集、削除...を行うためのメソッドがあります。その配列は、Cookieに保存する前にシリアル化する必要があります。セッションがCookieに保存されると、作成したメソッドを使用して、セッションを取り出したり、編集したり、削除したりできます。その際、ユーザーはCookieを表示できるため、セキュリティに注意してください。セッション値を暗号化する必要があります。
次に、セッションをデータベースに保存する場合は、同じ方法を使用できますが、今回はセッションをCookieではなくデータベースに保存します。
最善の方法は、すべてのセッションクラスが実装するセッションインターフェイスを作成することです。このようにして、Sessionクラスを使用でき、セッションがどこに保存されているかを気にする必要はありません。
私が今何について話しているのかわからない場合は、独自のセッションラッパーを作成するだけで、セッションについてさらに学ぶことができます。そして、OOPを使用してセッションを処理するための優れた方法を提供しました。それができたら、そのAPIを使用してセッションインターフェイスを記述し、すべてのセッションクラスにそのインターフェイスを実装し、セッションデータを保存する方法と場所に独自のロジックを記述できます。
そしてもう1つ、PHPセッションメカニズムに問題はありません。
暗号化されたCookieを使用する場合は、PHPのセッション処理を使用する必要はありません。基本的に、標準セッションはデータをサーバー(memcache、ファイル、またはデータベース)に保存し、データのID/キーはユーザーエージェントに与えられたCookieに配置されます。
暗号化されたCookieは、データをユーザーエージェントのCookieに保存し、ID/キーを完全に放棄するだけです。これにより、ストレージがユーザーにオフロードされるため、サーバーの負荷が軽減されます。
データが暗号化するのに十分重要でない場合は、Cookieの内容にHMAC署名するだけで、生の内容が表示されていても変更されないようにすることもできます。
暗号化されたCookieを使用する私の単純なPHPキットライブラリを試してみることをお勧めします。
$_SESSION = \Kit\Cookie::get('session');
...do stuff...
\Kit\Cookie::set('session', $_SESSION);
すべてのヘッダーを最初に送信する必要があるため、ユーザーに出力を送信する前に、必ずCookieを保存してください。
セッションを呼び出すときに私がすること
//セッションを開始し、変数を設定します
session_start();
$ _SESSION ['login'] ='yes';
$ _SESSION ['someinfo'] = $ var;
//呼び出すとき
session_start();
$ var = $ _SESSION ['someinfo'];
これがお役に立てば幸いです
-クリス