Cookieを設定するときに、ドメイン名が設定されていると、バックエンドはCookieを取得できず、ドメイン設定をコメントアウトするだけです。

Cookieを設定するためのパブリックメソッドを作成しました

ドメイン名が設定されている場合、バックエンドはCookieを取得できず、ドメイン設定をコメントアウトするだけであることがわかりました。

また、PATHが設定されていない場合、たとえば、要求されたURLはプロジェクトディレクトリ+ "/ login"であり、CookieのPATHはルートディレクトリです:/

新しいCookieコードは次のとおりです。

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     *
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
        try {
            if (cookieValue == null) {
                cookieValue = "";
            } else if (isEncode) {
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            cookie.setMaxAge(cookieMaxage);
            /*if (null != request) {// 设置域名的cookie
                String domainName = getDomainName(request);
                log.info(domainName);
                if (!"localhost".equals(domainName)) {
                    cookie.setDomain(domainName);
                }
            }
            cookie.setPath("/");*/
            response.addCookie(cookie);
        } catch (Exception e) {
             log.error("操作cookie异常", e);
        }
    }

 

Cookieを取得するためのコードは次のとおりです。

    /**
     * 得到Cookie的值,
     *
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) {
            return null;
        }
        String retValue = null;
        try {
            for (int i = 0; i < cookieList.length; i++) {
                if (cookieList[i].getName().equals(cookieName)) {
                    if (isDecoder) {
                        retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                    } else {
                        retValue = cookieList[i].getValue();
                    }
                    break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            log.error("操作cookie异常", e);
        }
        return retValue;
    }

 

 

(MaxAgeは正の数にすることができます。つまり、Cookieは作成から有効期限まで、秒単位で存在できます。このCookieはクライアントコンピューターに保存され、ブラウザを閉じたりコンピューターを閉じたりしても、その時間までCookieファイルとして保存されます。それまで有効期限はありません。

負の数の場合もあります。これは、Cookieがブラウザのメモリにのみ保存されることを意味します。ブラウザが閉じている限り、Cookieは表示されなくなります。maxAgeのデフォルト値は-1です。

0にすることもできます。これは、Cookieがクライアントコンピューターまたはブラウザーのメモリから削除されることを意味します。

maxAge属性が正の数の場合、maxAge秒後にCookieが自動的に期限切れになることを意味します。ブラウザは、maxAgeが正の数であるCookieを保持します。つまり、対応するCookieファイルに書き込みます。クライアントがブラウザを閉じるかコンピュータを閉じるかに関係なく、maxAge秒前であれば、WebサイトにログインするときにCookieは引き続き有効です。

maxAgeが負の数の場合、Cookieはこのブラウザウィンドウとこのウィンドウで開いた子ウィンドウでのみ有効であり、ウィンドウを閉じた後はCookieが無効になることを意味します。maxAgeが負の数であるCookieは、永続化されず、Cookieファイルに書き込まれない一時的なCookieです。Cookie情報はブラウザのメモリに保存されるため、ブラウザを閉じるとCookieは消えます。CookieのデフォルトのmaxAge値は-1です。

maxAgeが0の場合、Cookieが削除されていることを意味します。cookieメカニズムはcookieを削除する方法を提供しないため、cookieをすぐに期限切れにするように設定することで、cookieを削除する効果を得ることができます。無効なCookieは、ブラウザによってCookieファイルまたはメモリから削除されます。

応答オブジェクトによって提供されるCookie操作メソッドには、add操作add(Cookie cookie)が1つだけあります。Cookieを変更する場合は、同じ名前のCookieのみを使用して、元のCookieを上書きし、変更の目的を達成できます。削除するときは、maxAgeを0に変更するだけで済みます。

検出されたプロジェクトでは、アクションでCookieが作成され、maxAgeは-1です。次に、別の方法でCookieを削除するには、同じ名前とドメインでCookieを作成し、maxAgeを0に設定してから、 addCookie応答メソッドを使用して、クライアント側のCookieファイルまたはブラウザーメモリ内のCookieを削除します。

注1.Cookieを変更または削除する場合、名前、パス、ドメインなど、valueとmaxAgeを除く、新しく作成されたCookieのすべての属性は、元のCookieと完全に同じである必要があります。そうしないと、ブラウザは2つの異なるCookieが上書きされていないと見なし、変更と削除に失敗します。

注2:クライアントからCookieを読み取る場合、maxAgeを含む他の属性は読み取り不能であり、送信されません。ブラウザがCookieを送信すると、名前と値の属性のみが送信されます。maxAge属性は、Cookieの有効期限が切れているかどうかを判別するためにブラウザーによってのみ使用されます。

 

おすすめ

転載: blog.csdn.net/u013282737/article/details/105687919