0

Opera で Cookie の興味深い動作に遭遇しexpiresました。Cookie を削除するには、1 秒以上前にオプションを設定する必要があります。次のようなことをすると:

var date = new Date();

date.setTime( date.getTime() - 100 );
cookie('c', 'value', { expires: date });
expect(cookie('c')).toBeNull();

テストは失敗します。しかし、100 の代わりに 1000 を設定すると、パスします。しかし、他のブラウザではすべて問題ありません。toUTCString()期限切れのメソッドを使用します。

奇妙な点: Opera の動作は他のブラウザとは異なります。正しくない動作はどれですか? オペラかそれ以外か?

何かご意見は?

PS 他のブラウザーとしては、Safari、Chrome、および Firefox を意味します。

4

1 に答える 1

1

Date オブジェクトの toUTCString() メソッドを使用すると、次のような値が取得されます。

Wed, 12 Dec 2012 12:41:08 GMT

ご覧のとおり、そこで参照されている最小単位は秒です。スクリプトが 1 秒の最初の 99 ミリ秒の間に実行された場合、 100 ミリ秒を引くと 1 秒前の時間が得られる可能性があります。ほとんどの場合、現在の秒が終了すると有効期限が切れる Cookie を設定するだけであり、IMO Opera はその秒の残り (つまりスクリプトの残りの部分) の間 Cookie を保持することが技術的に正しいです。

(ややあいまいなスクリプトを処理するのは正しい方法だと思いますが、Opera はおそらく互換性のために他のブラウザーと有効期限ポリシーを調整する必要があると思います。また、Opera のバグトラッカーにバグがあることを思い出したようです) .

于 2012-12-12T12:48:00.567 に答える