ホームページ >php教程 >php手册 >PHP における Cookie のガイド

PHP における Cookie のガイド

WBOY
WBOYオリジナル
2016-06-21 09:14:221008ブラウズ

クッキー|クッキー

概要

Cookie は、サーバーまたはスクリプトが HTTP プロトコルの下でクライアントのワークステーション上の情報を維持するための方法です。 Cookie は、Web サーバーによってユーザーのブラウザに保存される小さなファイルであり、ユーザーに関する情報 (識別番号、パスワード、ユーザーが Web サイトで購入する方法、ユーザーがサイトを訪問した回数など) が含まれる場合があります。ユーザーがサーバーに接続するたびに、Web サイトは Cookie 情報にアクセスできます。

Cookieの設定方法は?

PHP では、setcookie 関数を使用して Cookie を設定できます。 Cookie は HTTP ヘッダーの一部であるため、コンテンツがブラウザに送信される前に Cookie 関数を設定する必要があります。この制限は header() 関数と同じです。クライアントから渡された Cookie はすべて、自動的に PHP 変数に変換されます。 PHP は情報ヘッダーを取得して分析し、Cookie 名を抽出して変数に変換します。したがって、setcookie("mycookie", "Cookies") などの Cookie を設定すると、php は値 "Cookies" を持つ $mycookie という名前の変数を自動的に生成します。

setcookie 関数の構文を見てみましょう:

init setcookie(string CookieName, string CookieValue, int CookieExpireTime, path, domain, int secure);

パラメータの説明:

PATH : Web サーバー上のディレクトリのデフォルトは、呼び出されたページが存在するディレクトリです。

DOMAIN: Cookie が使用できるドメイン名。デフォルトは、呼び出されたページのドメイン名です。このドメイン名には 2 つの「.」が含まれている必要があるため、トップレベル ドメイン名を指定する場合は、「.mydomain.com」を使用する必要があります

SECURE: 「1」に設定すると、Cookie はユーザーのブラウザによって使用されます。 安全であると考えられるサーバーによって記憶されます。

Cookie の使用例

 ユーザーの ID を自動的に識別し、関連する操作を実行する登録を必要とするサイトがあるとします。登録ユーザーの場合は、情報を送信します。登録ユーザーでない場合は、登録ページへのリンクが表示されます。

上記の要件に従って、まず登録ユーザー情報(姓名、メールアドレス、来店カウンター)を保存するデータベースを作成します。

まず次の手順に従ってテーブルを作成します:

mysql> データベース ユーザーを作成します。
クエリ OK、1 行が影響を受けます (0.06 秒)
mysql> use users ;
 データベースが変更されました
mysql> テーブル情報を作成します (FirstName varchar(20)、LastName varchar(40)、count varchar(3)); OK、影響を受ける行は 0 です (0.05 秒)



次に、データベースに対して Cookie をチェックするための PHP ページを構築します。

PHP は識別可能な Cookie を対応する変数に変換できるため、「myCookies」という名前の変数を確認できます。 ……
} else { //Cookieが存在しない場合
……
}
?>

When Cookie 存在する場合、次の手順を実行します:

最初に Cookie 値を取得し、explode 関数を使用してそれをさまざまな変数に分析し、カウンターを増やし、新しい Cookie を設定します:

$info =explode("& ", $myCookies);
…
$count++;
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$ count ;
SetCookie ("myCookies",$CookieString, time()+3600); //Cookie を設定します

次に、HTML ステートメントを使用してユーザー情報を出力します。

最後に、新しいカウンター値でデータベースを更新します。

この Cookie が存在しない場合は、登録ページ (register.php) へのリンクが表示されます。

以下の register.php はユーザー登録ページです:

/* register.php */



名: < input type="text" name="FirstName">
姓:
<input type="submit" value="登録">
  </form>

 register.php 登録ページでユーザーが入力した情報は、regOK.php に送信されます:

/* regOK.php */
if ($FirstName および $ LastName と $email) {
…//ユーザーがデータベースに存在するかどうかをクエリします
}
}else{
…//エラー処理
}




上記のプログラムの流れは次のとおりです:

最初に必要な情報がすべて入力されているかどうかを確認します。入力されていない場合は、戻って再入力します

すべての情報が入力されている場合は、まずユーザーを取得します。データベースからのログイン詳細

mysql_connect() または die ("データベースへの接続エラー!");
$query="select * from info where FirstName='$FirstName' and LastName=' $LastName' および email='$email'";
 $result = mysql_db_query("users", $query);
$info=mysql_fetch_array($result);
$count=$info["count"];

そのようなユーザーが存在するかどうかを確認し、存在する場合は古い情報を指定し、現在の情報で新しい Cookie を作成します。同じユーザーのデータベース ログインにそのようなユーザーは存在しないため、新しいデータベース ログインを作成し、新しい Cookie を作成します。

次に isset() 関数を使用して、ユーザーがカウンターを持っているかどうかを確認し、持っている場合はカウンターが増分され、新しい Cookie が作成されます。
$CookieString=$ FirstName.'&'.$LastName.'&'.$email.'&'.$count;
SetCookie ("myCookies",$CookieString, time()+ 3600);

A ユーザー カウンターでない場合は、mysql にレコードを追加し、Cookie を設定します

注: setcookie 関数を呼び出す前にブラウザにデータを出力しないでください。そうしないと、エラーが発生します。

クロスドメインCookieを実装するにはどうすればよいですか?

Cookieの仕様によれば、Cookieは1つのドメイン名に対してのみ使用できます。したがって、ブラウザでCookieがドメイン名に対して設定されている場合、そのCookieは無効になります。他のドメイン名。

それでは、クロスドメイン Cookie の実装計画について話しましょう:

ステップ 1: プリセット スクリプトを作成する

次のコードをプリセット スクリプトに追加します (または、すべてのスクリプトの前に関数に表示します)。

/*GET変数が設定されていてCookie変数と異なる場合
*get変数を使用(Cookie更新)
*/
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS
if (isset($; sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {
SetCookie('sessionid', $HTTP_GET_VARS['sessionid'], 0 , ' /', '');
$HTTP_COOKIE_VARS['sessionid'] = $HTTP_GET_VARS['sessionid'];
$HTTP_GET_VARS['sessionid']; このコードを実行すると、スクリプトで利用できるようになります。ユーザーの Cookie に sessionid 値、または GET リクエストを通じて送信された sessionid 値が保存されます。

ステップ 2: すべてのクロスドメイン名参照に変数を使用する

切り替え可能なドメイン名の基本的な参照形式を保存するグローバル構成ファイルを作成します。たとえば、domain1.com と domain2.com がある場合、次の設定になります。

$domains['domain1'] = "http://www.domain1.com/-$sessionid-"; $ Domains['domain2'] = "http://www.domain2.com/-$sessionid-";


次のコードを書きます:

echo "Click こちら</a>でお問い合わせください。";
?>

上記のコードは次の出力を生成します:

Click
こちら</a>にお問い合わせください

ここでは URL に sessionid が挿入されています。

ステップ 3: Apache を構成する

次に、この URL を書き換えるように Apache を構成しましょう。 http://www.ndsain2.com/-66543afe6543asdf6asd-
をこれに変える必要があります:
http://www.duin2.com/Contact/?Sessionid=6543ASDF6ASD そしてこの URL:
http:// www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes
次のようになります:
http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd

上記を実現するには To要件を満たしている場合は、次のように 2 つの仮想サーバーをドメイン 1 とドメイン 2 として構成するだけです。


DocumentRoot /usr/local/www/domain1
ServerName www.domain1.com
RewriteEngine on
RewriteRule ^/ - (. *)-(.*?.*)$ $2&sessionid=$1 [L, R, QSA ]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L, R, QSA ]
</VirtualHost>


DocumentRoot /usr/local/www/domain2
ServerName www.domain2.com
RewriteEngine on
RewriteRule ^/ -(.*)-(.*?.*)$ $2&sessionid =$1 [L, R, QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L, R, QSA]


これらの書き換えられたルール 上記2つのURL書き換え要件が実装されます。








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