0

Web サイトのモバイル ビューとデスクトップ ビューを切り替えるスクリプトを作成しています。私がそれを成し遂げる方法は、ユーザーが「デスクトップ」をクリックしたときにシステムに Cookie を配置し、ユーザーが「モバイル」をクリックしたときに Cookie を削除することです。

システムは最初に配置された Cookie で動作し、リダイレクトが行われます。また、私のスクリプトは index.php の Cookie を読み取り、Cookie が存在する場合はデスクトップ ビューを提供します。ユーザーが「モバイル」をもう一度クリックすると、Cookie が削除され、USER AGENT チェックが実行されます。

2 回目に「デスクトップ」リンクをクリックすると、Cookie が設定されず、スクリプトの実行に失敗します。これにはどのようなエラーが考えられますか?

御時間ありがとうございます

編集: setcookie("mobile", "web",time()+31536000, "/"); で Cookie を作成しています。

setcookie("mobile", "",time()-60, "/"); による Cookie の削除

HTTP ヘッダーから、スクリプトの初回実行時に Set-Cookie パラメーターが渡されていることがわかりますが、Cookie を削除して再試行すると、setcookie パラメーターが渡されません。

4

3 に答える 3

0

まず、Cookie の設定方法を確認できるように、コードを質問に追加する必要があります。だから私は大げさな推測をしており、クッキーのパスを設定していないと言っています.

php.netのドキュメントから

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

4 番目のパラメーターは $path で、デフォルトは Cookie が設定されている現在のディレクトリです。これは、ディレクトリにいて/desktopCookie を設定した場合、そのディレクトリにのみ適用されることを意味します。リダイレクトが行われ/mobile、Cookie が設定されていると推測できますが、適用されません。すべてのパス、つまりドメインで Cookie を表示したい場合は、パスを/明示的に設定しています。もちろん、Cookie をルートに設定した場合を除きますが、その場合は幸運です。

于 2011-07-13T14:41:16.730 に答える
0

1: Cookie の長さを正しく設定していますか? を使用して未来に設定されていることを確認します

setcookie("Cookie", $value, time()+3600);

2: Cookie を削除する代わりに、Cookie を true または false にしないこともお勧めします。これにより、削除に関するエラーが解決される可能性があります。

個人的には、あなた(モバイル サイト)と同様の使用法で setCookie に問題があったことはありませんが、常に mobileEnabled を使用して true または false に設定します。存在する場合、クライアントには設定があり、設定されているものは何でも使用することを意味します。

于 2011-07-13T13:26:54.207 に答える
0

php.netから:

setcookie() は、残りの HTTP ヘッダーと一緒に送信される Cookie を定義します。他のヘッダーと同様に、Cookie はスクリプトからの出力の前に送信する必要があります (これはプロトコルの制限です)。

新しい Cookie を削除して書き込むときに、Web サイトが出力を生成しないことを確認しましたか? いくつかの (デバッグ用の) echo() ステートメントを確認します。私もこれに出くわしました...

::コメントのため編集::

<?PHP

// write cookie
setcookie("TestCookie", "some value", time()+3600);

// expire coockie (delete)
setcookie("TestCookie", "some value", time()-1);

// write cookie
setcookie("TestCookie", "some value", time()+3600);
于 2011-07-13T13:44:00.427 に答える