PHP クッキー

PHP Cookie

Cookie はユーザーを識別するためによく使用されます。

クッキーとは何ですか?

Cookieはサーバーによって生成され、ユーザーエージェント(通常はブラウザ)に送信されます。ブラウザはCookieのキー/値を特定のディレクトリ内のテキストファイルに保存し、次回同じものをリクエストするときに送信します。 Web サイトの Cookie をサーバーに送信します (ブラウザが Cookie を有効にするように設定されている場合)。 Cookie の名前と値はサーバー側の開発者が定義できるため、サーバーはユーザーが正規のユーザーであるかどうか、再度ログインする必要があるかどうかなどを知ることができます。サーバーは、Cookie に含まれる情報を設定または読み取ることができます。サーバーとのユーザーのセッションのステータスを維持するための Cookie

Cookie を作成するには?

setcookie()関数はCookieを設定するために使用されます。

注: setcookie() 関数は <html> タグの前に配置する必要があります。

構文

setcookie(名前, 値, 有効期限, パス, ドメイン);

例 1

次の例では、「user」という名前の Cookie を作成し、値「runoob」を割り当てます。また、この Cookie が 1 時間後に期限切れになるように指定します:

<?php
setcookie("user", "runoob", time()+3600);
?>
<html>
.....

注: Cookie の値は、Cookie の送信時に自動的に URL エンコードされ、取得時に自動的にデコードされます。 (URL エンコードを防ぐには、代わりに setrawcookie() を使用します。)

例 2

別の方法で Cookie の有効期限を設定することもできます。これは秒を使用するよりも簡単な場合があります。

<?php
$expire=time()+60*60*24*30;
setcookie("user", "runoob", $expire);
?>
<html>
.....

上記の例では、有効期限は 1 か月 (60 秒 * 60 分 * 24 時間 * 30 日) に設定されています。

Cookieの設定とアプリケーション

Setcookie(string name, string value, int期限切れ,string path, string domain, intsecure); ここで、nameはCookie変数名の識別子であり、phpで通常を使用できます。変数名が同じ場合は、

cookie 変数を参照するために使用します。 value は cookie 変数の初期値、expired は cookie 変数の有効期間を表し、domain は cookie 変数の Web サイトを表し、secure は https が安全に送信される場合にのみ有効です。

SetCookie("Cookie", "cookievalue",time()+3600, "/forum", ".365shequ.com", 1);

名前、値である必要があります、ミリ秒である必要があります time()+3600= 1 時間 保存パス 保存されたドメイン HTTPS

PHP は cookie を読み取ります

スーパーグローバル変数 $_COOKIE 配列を使用して、現在のクライアントに保存されている cookie を読み取ります 新しい PHP ファイル set_cookie.php を作成します

コードは

print_r です。 ($_COOKIE );
echo $_COOKIE['foo'];

Cookieが正常に設定されたかどうかを確認します

Cookieの有効期限を設定します

3番目のパラメータはUNIXタイムスタンプです

0デフォルト値、ブラウジングを閉じる サーバーはすぐに期限切れになります

time() + 86400 1 日

setcookie('foo', 'a', time() + 86400);

設定後ブラウザを閉じてください、ブラウザを開いてくださいもう一度アクセスして、Cookie が存在するかどうかを確認します

Cookie のパスを設定します

setcookie('bar', 'b', time() + 86400, '/uploads');

• bar という名前の Cookie が / ディレクトリ下の PHP ページで読み取れるかどうかをテストしてください

• できるかどうかをテストしてくださいfoo という名前の Cookie は、/uploads の下の PHP ページから読み取られますか? 別のサブディレクトリを作成し、そのサブディレクトリ内の PHP ページからどの Cookie を読み取れるかをテストしてください。パスが設定されると、そのパスの下の Cookie は、そのパスの下のページ

Cookie のドメイン名を設定します

setcookie('key', 'val', time() + 86400, '/uploads', '.your .domain');ドメイン news.php.cn に設定された Cookie は、sports.365jia.cn の下のページでは読み取ることができません。また、その逆も同様です

すべての第 2 レベル ドメイン名で Cookie を共有したい場合は、そうする必要があります。ドメインは .php に設定されています。 .cn

Cookie制限の問題

多くのブラウザでは、Webサイトに設定できるCookieの数が50を超えてはいけないと規定されており、ブラウザによっては30に制限されている場合もあります。ブラウザには Cookie のサイズにも制限があり、一般に 4K サイズを超えることはできません

Cookie のセキュリティ上の問題

インターネット カフェでインターネットサーフィンをした後、コンピューターをシャットダウンしないと、他の人があなたの背後にあるものを使用することになりますコンピュータでは、アクセスしたすべての Web サイトの履歴や Web サイトに保存された Cookie の内容を確認できます。重要なデータ (ユーザー名、パスワード、カード番号、携帯電話番号、ID 番号など) が漏洩すると非常に危険です。 Cookie に保存されます。 したがって、重要なデータを Cookie に保存する必要がある場合は、サーバーによって保存する必要があります。

Cookie についての注意事項

同じコンピューター上の異なるブラウザーは Cookie を共有できません。 同じブラウザーと異なるドメイン名では依然として Cookie を共有できません

同じブラウザーと同じドメイン名でも、異なるパスを持つ Cookie は共有できません

Cookie の値を取得する方法?

PHP の $_COOKIE 変数は、Cookie の値を取得するために使用されます。

次の例では、「user」という名前の Cookie の値を取得し、ページに表示します:

<?php
// 输出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
?>
次の例では、isset() 関数を使用して、Cookie が設定されているかどうかを確認します:

<html>
<head>
<meta charset="utf-8">
<title> php中文网(php.cn)</title>
</head>
<body>
<?php
if (isset($_COOKIE["user"]))
         echo "欢迎 " . $_COOKIE["user"] . "!<br>";
else
         echo "普通访客!<br>";
?>
</body>
</html>

Cookieを削除するにはどうすればよいですか?

Cookie を削除するときは、有効期限を過去の時点に変更する必要があります。

削除されたインスタンス:

<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>

ブラウザが Cookie をサポートしていない場合はどうすればよいですか?

アプリケーションが Cookie をサポートしていないブラウザに対応する必要がある場合は、アプリケーション内のページ間で情報を渡すために他の方法を使用する必要があります。 1 つの方法は、フォームを介してデータを渡すことです (フォームとユーザー入力については、このチュートリアルの前の章で説明しています)。

以下のフォームは、ユーザーが「送信」ボタンをクリックすると、ユーザー入力を「welcome.php」に送信します:

<html>
<head>
<meta charset="utf-8">
<title> php中文网(php.cn)</title>
</head>
<body>
<form action="welcome.php" method="post">
名字: <input type="text" name="name">
年龄: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>

次のように「welcome.php」ファイル内の値を取得します:

<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
欢迎 <?php echo $_POST["name"]; ?>.<br>
你 <?php echo $_POST["age"]; ?> 岁了。
</body>
</html>

半拍

実際の開発でよくある間違いは、setcookie

setcookie('foo', 1);

print_r($_COOKIE);
echo $_COOKIE[ 'foo'];

の後に$_COOKIEを通して直接データを取得することです。上記の状況では、設定したばかりの Cookie を取得できません。これがタイトルで述べた速度低下の問題です。

原理は非常に簡単で、Cookie は実際にブラウザーに保存されます。現在のページがブラウザに返された後にのみ、ブラウザに保存されます。そのページが 2 回目にアクセスされると、PHP はブラウザの Cookie 内のデータを読み取ることができます

そして、_COOKIE 内のデータはクライアントからサーバーに持ち込まれます。ページがリクエストされるたびに

これが、その時点で設定され、その時点では取得できなかった理由です

速度低下を解決する 1 つの方法は、値を保存した後すぐにページを更新することです。


学び続ける
||
<?php // 设置 cookie 过期时间为过去 1 小时 setcookie("user", "", time()-3600); ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜