Über einen filter hinzufügen, wird ein cookie auf dem Benutzer-Sitzung

Update: Das Problem mit der Einstellung für die MaxAge. Eine Einstellung von null führen wird das cookie gelöscht werden, daher war es angezeigt, in den header der Antwort, wurde dann aber gelöscht und nicht zeigen, dass in der Anfrage. Eine Einstellung von -1, so dass es wird nicht persistent gespeichert

Ich mache einige Arbeit auf einem filter, in dem ich will, dass es ein cookie gesetzt, um anzuzeigen, dass der Benutzer qualifiziert, die an der Umfrage teilnehmen und das nächste mal kommt er zurück auf die Website ein Umfrage-popup-Fenster wird angezeigt.

Ich bin nicht zu sehen, keine Fehler in den logs, aber das cookie wird nie gesetzt.

Kann ein filter verwendet werden, das hinzufügen ein cookie? Gibt es wo eine HttpServletResponseWrapper ins Spiel kommt?

Der Gedanke hier ist, dass, wenn der Benutzer kommt auf die Seite es wird überprüft, um zu sehen, ob das cookie vorhanden ist. Wenn es nicht ist, dann ein cookie erstellt und Hinzugefügt, um die Reaktion. Wie navigiert der Anwender der Webseite, die cookie-check-Methode wird aufgerufen, um sicherzustellen, dass der hit-counter nicht erhöht wird für diesen bestimmten Benutzer.

Den cookie-check-Methode sieht nie die cookie. Mit web-developer plugin für firefox, das cookie in Frage, ist nicht vorhanden.

Unten ist der filter Klasse mit den entsprechenden Methoden.

public class HitCounterFilter extends TemplateFilter {
    public void doMainProcessing(ServletRequest pRequest, ServletResponse pResponse, FilterChain pChain) {
        HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
        HttpServletResponse httpResponse = (HttpServletResponse) pResponse;

        //prevent thread interference and memory consistency errors
        synchronized (lock) {
            int hitCounter = this.readFile(localFile);

            //if user has not been counted
            if (!this.checkForCookie(httpRequest, "gtgo_visitor")) {
                this.writeFile(localFile, ++hitCounter);
                this.createCookie(httpRequest, httpResponse, String.valueOf(hitCounter), "gtgo_visitor");
            }
        }
    }

    private void createCookie(HttpServletRequest pHttpRequest, HttpServletResponse pHttpResponse, String pCookieValue, String pCookieName) {
        try {
            Cookie cookie = new Cookie(pCookieName, pCookieValue);
            URL url = new URL(pHttpRequest.getRequestURL().toString());
            cookie.setDomain(url.getHost());
            cookie.setPath(this.getCookiePath(pHttpRequest));
            cookie.setComment("user is not eligible to take the survey this time");
            cookie.setMaxAge(0);

            pHttpResponse.addCookie(cookie);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    private boolean checkForCookie(HttpServletRequest pHttpRequest, String pCookieName) {
        for (Cookie cookie : pHttpRequest.getCookies()) {
            if (StringUtils.equalsIgnoreCase(cookie.getName(), pCookieName)) {
                return true;
            }
        }
        return false;
    }
} 
Das ist zu viel code zu zügeln. Ich bin mir ziemlich sicher, dass über 90% des Codes irrelevant für das konkrete problem. Bitte kommen Sie mit den kleinsten möglich, aber selbst mit code-snippet, die noch reproduziert Ihr problem. Du hast übrigens nicht gesagt, wie Sie den Schluss, dass der cookie nicht gesetzt ist. Es fehlt in der Antwort-header? Oder ist es fehlt in der request-header, der die nachfolgenden Anforderungen?
Haben Sie die änderungen - hoffentlich ist es klarer.

InformationsquelleAutor boyd4715 | 2011-10-21

Schreibe einen Kommentar