57

クライアント側の JavaScript が Cookie を設定する際に、この本当に奇妙な問題があります。現在、Cookie を使用して「設定」を保存するための小さな 1 ページのデモを開発しています。このデモやサードパーティの jQuery プラグインにはサーバー側の言語を使用できないことに注意してください。

そこで、Cookie を設定するための JavaScript オブジェクトを作成しました。

var cookie = {
  set: function (name,value,exdays) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=name + "=" + value;
    console.log(document.cookie);
  }
}

cookie.set('foo','bar',2);
console.log(document.cookie);

空の文字列を返すだけです。Chromeコンソールにアクセスして、直接変更して実行できるかどうかを確認しましたdocument.cookie

> document.cookie = "foo=bar";
"foo=bar"
> document.cookie
""

クライアント側のJavaScriptを介してCookieを設定するにはどうすればよいですか?

編集: シークレット モードではなく、Cookie が有効になっています。

4

6 に答える 6

100

HttpOnly Cookie は Javascript からアクセスできず、通常、セッション Cookie は HttpOnly Cookie として設定されます。この StackOverflow の質問も参照してください: JavaScript を使用して安全な Cookie を読み取る方法

だから...あなたが読みたいクッキーに「HttpOnly」フラグが設定されているかどうかを確認してください...もしそうなら、あなたは犯人を知っています. これはバグではなく、機能です。

于 2013-08-15T11:40:44.203 に答える
59

Web サーバーで実行されていない場合、見た目で Cookie を設定することはできません。

file:///C:/Users/me/Desktop/demo/demo.html

でも:

http://localhost/demo/demo.html動作します。

于 2013-04-10T01:26:33.563 に答える
1

これは、chrome 28.0.1472.0 canary を実行して、localhost から実行したときにうまくいきました。

<!DOCTYPE html>
<html>
<head>
  <title>localhost cookie</title>
</head>
<body>
  <script type="text/javascript">
    console.log(document.cookie);
    var myCookie = "mycookie=hellocookie";
    document.cookie = myCookie;
  </script>
</body>
</html>

サーバーで実行し、ページにアクセスして Cookie ストアを確認し、ページを更新してコンソールを確認します。

ファイルとして開かれたときは Cookie を設定しませんでしたが、サーバーから開かれるたびに機能しました。

于 2013-08-22T11:10:48.357 に答える
0

使用方法とドキュメントについては、こちらを参照してください。

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

シークレット モードを使用している場合、または Cookie を無効にしている場合は、機能しません。

于 2013-04-10T00:15:43.300 に答える
0

Cookie に間違ったパスを設定した可能性があります。

私の場合、アプリケーションは通常 address にあるためpath、Cookie を に設定します。ただし、テスト中に、デフォルトのアドレスでアプリケーションを開いたので、パスを使用して Cookie を作成できましたが、読み取ることはできませんでした。解決策は、 address でアプリケーションをテストすることでした。/foohttp://example.org/foohttp://localhost:3000/foohttp://localhost:3000/foo

于 2020-09-23T11:35:12.123 に答える