web-dev-qa-db-ja.com

jQuery Cookieがセッション変数のように期限切れになる可能性はありますか?

私はこの質問が何千回も聞かれたことを知っていますが、答えのどれも私が探しているものを本当に私に与えません。 jQuery cookie を使用して情報を保存していますが、ブラウザーを閉じると期限切れになります。 window.unloadは実行可能なオプションではありません(読み取り:機能しません)。

私の質問はこれです:セッションのように、ブラウザが閉じたときにCookieを期限切れにするように設定することは実際に可能です?もしそうなら、誰かが方法を知っていますか?

更新:有効期限:0(機能しませんでした)を渡す代わりに、非常に単純であることがわかりました。有効期限をまったく渡さないでください。さて、これはなぜ多くの質問がなかったのかを説明しています。

皆さんありがとう。

10
Adam K Dean

有効期限を渡す代わりに、非常に単純であることがわかります:0(これは機能しませんでした)、有効期限をまったく渡さないでください。さて、これはなぜ多くの質問がなかったのかを説明しています。

したがって、次のようなフラグで有効期限を渡す代わりに:

$.cookie(key, value, { expiry: 0, domain: '', path: '' });

有効期限の値を省略するだけです。

$.cookie(key, value, { domain: '', path: '' });

そしてそれは機能します。それはとても単純なことで、私を混乱させました。

どっちにしても、ありがとうね!

21
Adam K Dean

RFC 2965仕様 で可能です。つまり、Cookie処理コードで「Discard」プロパティを設定し、ブラウザがサポートしている場合はを設定すれば可能です。

つまり、jQuerycookieはDiscardプロパティをサポートしていません。 jQuery-Cookie コードを次のように拡張する必要があります(元のファイルの約57行目です)。

        return (document.cookie = [
            config.raw ? key : encodeURIComponent(key),
            '=',
            config.raw ? value : encodeURIComponent(value),
            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
            options.path    ? '; path=' + options.path : '',
            options.domain  ? '; domain=' + options.domain : '',
                            options.discard ? '; Discard=' + options.discard : '',
            options.secure  ? '; secure' : ''
        ].join(''));
2
schlingel

このようなデフォルト設定を使用する場合

 $.cookie.defaults = { path: '/', expires: 365 };

次に、Cookieの値ごとに次の属性を使用する必要があります

$.cookie(key, value, { expires: null });
1
Otto Kanellis