1

私はこれを理解する気が狂います。私はPHPが初めてです

私は単純にクエリ文字列変数を Cookie の中に入れて、サイトのすべてのページで利用できるようにしようとしています。現在起こっていることは、クエリ文字列がある場合にのみ Cookie を設定し、別のページに移動すると Cookie がなくなることです。

私のすべてのphpページには、上部に次のコードがあります。

<?php

$expire=time()+60*60*24*30;

if (isset($_GET['v'])) {
$thev = $_GET['v'];

if (!isset($_COOKIE["ckv"])) {
setcookie("ckv", $_GET['v'], $expire);
}
} else if (isset($_COOKIE["ckv"])) {
$thev = $_COOKIE["ckv"];
} else {
$thev = 'nothing';
}
?>
  1. page1 効く!(クッキーを表示)
  2. page1 no querystring 動作します! (クッキーを表示)
  3. page2 壊れた。(クッキーがなくなった!)

** これらは順番にクリックされました。したがって、ページ3にはCookieが表示されているはずです

ありがとうございました

4

2 に答える 2

1

上記の回答に同意します。$_COOKIE の代わりに SESSIONS を使用することを検討してください。それらはクッキーよりもはるかに柔軟で、はるかに安全です

http://us3.php.net/manual/en/features.sessions.php

于 2012-10-11T03:23:44.887 に答える
0

これについて私が見ることができる3つの答えがあります。

最も可能性が高いのは、ページ 1 とページ 2 が異なるディレクトリにあることです。デフォルトでは、Cookie は現在のディレクトリに配置され (ブラウザで指定されているように - インクルード/Apache リダイレクトなどは無視されます)、そのディレクトリ以下にのみ適用されます。持っているならあなた

/dir1/page1 
/dir2/page2

その場合、ページ 1 の Cookie は、デフォルトではページ 2 では使用できません。

パスを指定することで、これを回避できます (ドキュメントを参照してください)。ここで、Cookie が適用されるディレクトリを宣言します。最も一般的には、これを '/' (ルート) に設定します。これは、アプリケーション内の任意のページに適用されることを意味します。


今いくつかの落とし穴:

既に「/dir1/」に Cookie があるため、コードを変更して「/」のパスを含めて実行すると、実際には 2 つの Cookie が作成されます。1 つは「/」に、もう 1 つは「/」にあります。 dir1/'. 最初に削除しない限り、ページ 1 は「/dir1/」Cookie を引き続き取得します。また、「/dir2/」にも空白の Cookie がないことを確認してください (つまり、コードに空白ではなく「何もない」ことを確認します。これは、Cookie はあるが値が空白であることを意味します)。サブディレクトリに Cookie があると、多くのフラストレーションが生じる可能性があります。

他の考えられる原因は、キャッシュ (値をキャッシュしていないことを確認してください) と別のドメイン (ドメイン間で Cookie を共有することはできません。サブドメイン間で共有する場合は、ルート ドメインを指定する必要があります) に関係しています。 - ドキュメントを参照してください)。

于 2012-10-11T04:51:14.527 に答える