1

ページが機能しないため、テストとして簡単なコードを使用しています。私はこの問題についてグーグルを持っていて、ここで検索しましたが、誰もそれについて言及していないようです! 私が読んだクッキーのtutsでも!

シンプルな setcookie php 行のコードがあります。

<?php 
if($_COOKIE['PHP1'] !== 'php'){
$blah = setcookie('PHP1','php',time() + (1000 * 120),'/','',false,false);}
?>

html の前のページの上部にあり、Cookie PHP1 を php に設定します。

次に、本文にいくつかのコードがあります。

<?php 
if($blah){echo 'PHP1 has been set';}
else {
    echo 'cookie php1 = ' . $_COOKIE['PHP1'];}
?>

Cookie が設定されているかどうか、設定されている場合はその値を教えてください。まっすぐ進み、うまく機能します...

(ページには jquery と jquery プラグイン :COOKIE: がリンクされています;) 次に、コンソールを使用して Cookie の値を確認し、Cookie プラグインで値を変更します。コードは次のとおりです。

$.cookie('PHP1');
--"php"
$.cookie('PHP1','javascript', { expires: 7, path: '/' });
--"PHP1=javascript; expires=Sat, 09 Mar 2013 19:00:57 GMT; path=/"
$.cookie('PHP1');
--"javascript"

ここまではすべて問題ないので、ページを更新すると、予想どおり PHP1 が設定されていることがわかります。次に、php1 = php であることを期待してもう一度更新しますが、PHP1 が設定されていると表示され続けます。

PHP1 の値を表示するためだけに PHP コードを編集すると、PHP1 の値が JavaScript であることがわかりますか?

私はここで何か間違っていますか?それとも、javascript が改ざんされた後、php で Cookie を編集できないだけですか? (セキュリティのせいかな?)

Cookie 自体は、ログインや安全な機能のためのものではなく、アクセシビリティ、テキスト サイズ、色覚異常の設定に使用されるだけです。何らかの理由でjavascriptが無効になっている/無効になっている場合に備えて、両方を使用できるようにしたいと思います!

前もって感謝します

編集

OK、Chrome でローカルホストの Cookie を確認しましたが、PHP1 Cookie が 2 つあります。

Name:   PHP1
Content:    php
Domain: localhost
Path:   /
Send For:   Any kind of connection
Accessible to Script:   Yes
Created:    Saturday, 2 March 2013 19:01:21
Expires:    Monday, 4 March 2013 04:21:21


Name:   PHP1
Content:    javascript
Domain: localhost
Path:   /Cookie_test
Send For:   Any kind of connection
Accessible to Script:   Yes
Created:    Saturday, 2 March 2013 18:50:08
Expires:    When the browsing session ends

2 つ目の /Cookie_test パスは JavaScript だと思います! これが問題である場合、javascriptがパスをディレクトリではなく「/」として書き込むようにするにはどうすればよいですか? 私のコードからわかるように、「/」としてパスを指定しましたか?

実際には、phpで行ったように5番目のオプションを追加していないためですか??

4

2 に答える 2

2

@MIIBのコメントを拡張するために、PHPsetcookie()関数$_COOKIEスーパーグローバルは直接相互作用しません。

マニュアルが「一般的な落とし穴」の下に述べているように:

Cookieは、Cookieが表示されるページが次に読み込まれるまで表示されません。

事実上、ブラウザから受け取っ$_COOKIEたCookieに基づいて、PHPスクリプトの最初に作成されます。一方、スクリプトが出力を送信するときにブラウザに送信されるCookieを定義します。setcookie()

setcookie呼び出しを上書きするものでラップすることもできます$_COOKIE(または、さらに良いことに、独自のオブジェクトgetCookiesetCookieメソッドを使用することもできます)。

編集:直接書き込むそのような関数の本当に些細な例として$_COOKIE

function set_cookie_and_superglobal($cookie_name, $cookie_value)
{
    // For simplicity, this hard-codes the same parameters as the code in the question, and just generalises the name and value
    setcookie($cookie_name, $cookie_value, time() + (1000 * 120),'/','',false,false);
    $_COOKIE[$cookie_name] = $cookie_value;
}
于 2013-03-02T19:53:18.797 に答える
0

ここで説明したように、私の問題はローカルホストが原因でした!!! 私のループバック(127.0.0.1)を使用すると、私が述べたようにすると完全に機能します。ローカルホストに「.」がなく、一部のブラウザ(クロムなど)が気に入らないことに関係があると読みました!!

問題の一部は、jquery が php Cookie を読み取ってから、私の質問で編集したようにパスに追加の詳細を含む独自の 2 番目の Cookie を設定することでした。Phpはこれを必要に応じて読み取りますが、Cookieを再度設定すると、古いCookieが「編集」されますが、Jquery Cookieから読み取られます!!!

于 2013-03-02T22:05:39.707 に答える