Cookie|セッション|変数
多くの場合、Web サイト全体で訪問者のアクティビティを追跡し、その ID を自動的または半自動的に識別する必要があります (つまり、よく言及される Web サイトへのログインなどの機能)。このとき、多くの場合、一連の変数が使用されます。訪問者を「フォロー」します。変数「following」を実装するにはさまざまな方法がありますが、より一般的に使用されるのは cookie と session です。以下では、一般的な PHP を使用してその使用法を説明します。
1. Cookieの使用
Cookieとは、Webサイトによってブラウザクライアントに保存される情報であり、通常、訪問者のマシンに保存されている変数がHTTPヘッダーとともにクライアントに送信されます。 Cookie が有効になった後、有効期限が切れる前に、顧客がページをリクエストするたびに、それに応じて処理する限り、Cookie も一緒にサーバーに送信され、変数の「フォロー」を実現できます。
1. Cookie 変数を設定する
Cookie 変数を設定するには、PHP で使用される関数は次のとおりです:
int setcookie(string name, string value, int Expired,
string path, string domain, int secure);
ここで、name はCookie 変数名識別子を使用すると、通常の変数名と同じように、PHP で Cookie 変数を参照することができます。 value は Cookie 変数の初期値、expired は Cookie 変数の有効期間を表し、domain は Cookie 変数の Web サイトを表します。
たとえば、変数のユーザー名を設定したい場合、その値は文字列「bluewind」で、次のようなコードを書くことができます:
setcookie ("username", "bluewind"); //これらの 2 つのパラメーターは次のとおりです。 setcookie に必要です。
操作のタイムアウトを制限するために、この変数の有効時間を 10 分などに設定することもできます:
setcookie ("username", "bluewind", 600000); //有効時間の単位はミリ秒です。
注: setcookie は、header 関数と同様に、クライアントに出力できるステートメントの前に配置する必要があります。
2. 変数を破棄するには
Cookie 変数を破棄するには、その値を空 ("") に設定するだけです。上記の変数を破棄したい場合は、再度次のように記述します:
setcookie ("username", "");
以上です。これは安全に脱出する目的でよく使用されます。
3. Cookie の有効範囲と有効期間
Cookie の有効範囲 (つまり、この Cookie 変数はこの範囲のページで取得できます)。デフォルトはこのディレクトリとそのサブディレクトリです。もちろん、パスとドメインを使用できます。 setcookieのパラメータを見直します。 Cookie の有効期限を設定しない場合 (1. Cookie 変数の設定の例を参照)、Web サイトのページを離れるときに、同時に Cookie は自動的に破棄されます。
http://www.netscape.com/newsref/std/cookie_spec.html は、Cookie の創始者である Netscape によって提供される完全な紹介情報です。
2番目、セッションの使用
セッションレベル変数とも呼ばれるセッション変数は、訪問者のWebサイトとの対話全体を通じて存在するパブリック変数です。クライアントが Cookie をサポートしていない、またはサポートしていない可能性がある場合 (Linux の lynx など...あはは、ちょっと悲惨です)、データが正しく安全であることを確認するために、セッション変数を使用する必要があります。セッションはさまざまな Web 言語で異なる方法で実装されており、PHP も 4.0 以降でサポートを開始します。まず、簡単な例を見てみましょう:
test.php
----------
session_start(); //変数 var
$ を登録します。 var="これは SESSION 変数の値です"; //var 変数はセッション変数として使用されています
?>
test1.php
------
session_start(); (var ; セッションを初期化する関数。この関数の使用法は次のとおりです:
: boolean session_start(void);
その関数は、新しいセッションを初期化することです。顧客がすでにセッションに参加している場合は、に接続しますオリジナルのセッション。この関数にはパラメータがなく、戻り値は true です。
2. セッションに変数を登録します
セッションに保存したい変数は、次の関数を使用して変数を登録する必要があります:
boolean session_register(string name);
この関数は変数をグローバル変数を現在のセッションに追加します。パラメータ名は追加する変数の名前です。成功した場合は true 値を返します。
その後、変数名を直接使用して値を代入すると、値が保存されます。
3. セッション変数の値を使用する
上の例に示すように、新しいページで前の 2 つの手順 (代入を除く) を繰り返す限り、セッション変数を直接使用できます。
4. セッションの破棄
変数全体を破棄するのではなく、変数の登録を解除したい場合は、関数を使用する必要があります:
boolean session_unregister(string name);
使い方はとても簡単です。パラメータ名は削除する変数の名前です。成功した場合は true 値を返します。
ただし、安全に終了するなど、セッション変数を完全に「破棄」したい場合は、関数を使用します:
boolean session_destroy(void);
この関数は、現在のセッションを終了します。この関数にはパラメータがなく、戻り値は true です。
5. その他の便利なセッション関数
a. 変数が登録されているかどうかを確認する
boolean session_is_registered(string name);
この関数は、指定された変数が現在のセッションに登録されているかどうかを確認できます。パラメータ名はチェックする変数の名前です。成功した場合は true 値を返します。
b. 登録された変数を null に戻す
void session_unset(void); この関数は、もちろん、登録されているすべてのセッション変数を null に設定することができます。これは登録解除ではなく、破棄と同じではないことに注意してください。 次の例は、この関数をわかりやすく説明しています。
session_register('a','b','c'); //自動セッション開始
$b=2; ('a'); // $a を登録解除します
echo "A: $a - reg:".session_is_registered('a')." ";
// ただし、グローバル $a は残ります
session_unset(); $b および $c
echo "B:$b - reg:".session_is_registered('b')." ";
// 登録は残ります !
echo "C:$c - reg:".session_is_registered('c ')." ";
echo session_encode()
?> 出力:
A: 1 - reg:
B: - reg:1
C: - reg:1
!b|!c|
c. 独自のセッション処理メソッドをカスタマイズします
void session_set_save_handler (string open、string close、string read、
string write、string destroy、string gc)
この関数はユーザーレベルのセッション保存関数を定義できます (開く、閉じる、書くなど)。たとえば、この関数はセッションをローカル データベースに保存する場合に便利です。デフォルトでは、各セッションはシステムの一時ディレクトリ (たとえば、Unix システムの /tmp) 内の個別のファイルに保存されます。これはニーズに応じて適切な場合もあれば、適切でない場合もあります。たとえば、PHP 対応の Web サーバーが異なるマシンに分散されている場合、それらの間でセッションを簡単に共有することはできません (もちろん、セッションを NFS 共有に保存することもできます)。もう 1 つの潜在的な問題は、マシン上のファイル システムが数千または数百万のセッション ファイルで乱雑であることです。注: この機能はバージョン 4.0b4 以降にのみ登場しました。この関数を使用する前に、まず php.ini ファイル session.save_hadler=user を設定する必要があります。そうしないと、session_set_save_handler() が有効になりません。
さらに、私のテストによると、そのようなセッションをページ間で使用したい場合は、セッションを使用する各スクリプト ファイルにカスタム関数と session_set_save_handler も追加する必要があります。したがって、最良の方法は A を別のものにすることです。インクルードされるファイルは、セッションを使用するすべてのスクリプトにインクルードされます。
次の例は、デフォルトのファイル方法と同様の、基本的なセッション保存方法を示しています。データベースを使用してこれを行う場合も、非常に簡単に行うことができます。
例: session_set_save_handler() の例
function open ($save_path, $session_name) {
global $sess_save_path, $sess_session_name
$sess_session_name = $session_name; ;
戻る( true);
関数 close() {
return(true);
関数読み取り ($id) {
グローバル $sess_save_path, $sess_session_name = "$sess_save_path/sess_$id"; ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file))
} else {
return("");
}
}
function write ($id, $sess_data) {
global $sess_save_path, $sess_session_name;
if ($fp = @fopen($sess_file, "w")) {
return(fwrite($fp, $sess_data));
} else {
return(false)
}
function destroy ($id) {
global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file))
/***********************************************
* 警告 - 必要になります。ここに *
* * 一種のガベージ コレクション ルーチンを実装します。 *
* ********************************************/
function gc ($maxlifetime) {
return true; session_set_save_handler
("open", "close", "read", "write", "destroy", "gc");
//通常どおりセッションの使用に進みます
//これで、通常どおり続行できますセッションも同様に使用します。
?>