Проблемы с получением правильного cookie в Java - PullRequest
2 голосов
/ 14 апреля 2010

Когда я получаю куки в моем сервлете Java, все значения из getPath () равны нулю.

Таким образом, если в каталоге / foo и в корневом каталоге установлен файл cookie с тем же именем, я получаю два файла cookie с одинаковым точным именем, но не могу их различить, потому что getPath () возвращает null для обоих.

Я заглянул в firebug и увидел, что firefox ничего не посылал по пути.

Мое приложение использует cookie "Rememberme" с путем, установленным в "/". Все работает нормально, пока есть только один файл cookie с именем Rememberme. Но если каким-то образом другой файл cookie будет установлен с другим именем, например, / foo, то мое приложение не будет знать, какое из них я установил для корня.

Как я могу дифференцировать куки? Нужно ли беспокоиться о файле cookie, существующем с тем же именем в поддиректории, или я могу просто предположить, что будет только тот, который я установил?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2010

Если браузер не отправляет путь, вы должны установить путь к «/» в вашем обработчике Cookie.

Ваш сервер устанавливает файлы cookie, а не веб-браузер, поэтому, если вы установите все пути для файлов cookie, которые вы создаете, в «/» для того же домена, вам не нужно об этом беспокоиться.

0 голосов
/ 15 апреля 2010

Браузер будет отправлять файлы cookie, определенные для пути / foo, только тогда, когда путь URL начинается с / foo. Если в файлах / и / foo установлены файлы cookie с одинаковыми именами, их невозможно различить.

0 голосов
/ 14 апреля 2010

Я не уверен, насколько это вам поможет, но недавно я написал этот метод для извлечения файлов cookie из объекта URLConnection и возврата их в виде строки:

public String getCookies(URLConnection connection) {
    String headerName = null;
    String cookie = "";
    for (int i=1; (headerName = connection.getHeaderFieldKey(i))!=null; i++) {
        if (headerName.equals("Set-Cookie")) {
            if (cookie.equals("")) {
                cookie = connection.getHeaderField(i);
            }
            else {
                cookie = cookie + "; " + connection.getHeaderField(i);
            }
        }
    }
    writeToCookiesFile(cookie);
    return cookie;
}

Хотя этот метод использовался только в простом приложении :) Надеюсь, что он принес какую-то пользу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...