Различные статьи и SO ответ s предполагают, что удаление cookie через JS должно быть сделано так:
document.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
или если нам нужно указать домен / путь, например:
document.cookie = cookieName + "=" +
(path ? `;path=${path}` : "") +
(domain ? `;domain=${domain}` : "") +
";expires=Thu, 01 Jan 1970 00:00:01 GMT";
Теперь в месте без полномочий root (например, https://classic.tiddlywiki.com/upgrade/) происходит более сложная ситуация. Если вы откроете его и введете document.cookie
в консоли, вы получите одно значение (без domain
, path
или expires
указано):
TiddlyWikiClassicOptions=chkRegExpSearch:%22false%22 chkCaseSensitiveSearch:%22false%22 chkIncrementalSearch:%22true%22 chkAnimate:%22true%22 chkSaveBackups:%22true%22 chkAutoSave:%22false%22 chkGenerateAnRssFeed:%22false%22 chkSaveEmptyTemplate:%22false%22 chkOpenInNewWindow:%22true%22 chkToggleLinks:%22false%22 chkHttpReadOnly:%22true%22 chkForceMinorUpdate:%22false%22 chkConfirmDelete:%22true%22 chkInsertTabs:%22false%22 chkUsePreForStorage:%22true%22 chkDisplayInstrumentation:%22false%22 chkRemoveExtraMarkers:%22false%22 txtBackupFolder:%22%22 txtEditorFocus:%22text%22 txtMainTab:%22Timeline%22 txtMoreTab:%22moreTabAll%22 txtMaxEditRows:%2230%22 txtFileSystemCharSet:%22UTF-8%22 txtTheme:%22%22 txtUserName:%22YourName%22
и запись в консоли
document.cookie = 'TiddlyWikiClassicOptions=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
не удаляет cookie (или не изменяет его значение) (document.cookie
дает то же самое). Более того, написание
document.cookie = 'TiddlyWikiClassicOptions=lalala';
не изменяет существующий файл cookie, а добавляет другой файл с таким же именем:
TiddlyWikiClassicOptions=lalala; TiddlyWikiClassicOptions=chkRegExpSearch:%22false%22 chkCaseSensitiveSearch:%22false%22 chkIncrementalSearch:%22true%22 chkAnimate:%22true%22 chkSaveBackups:%22true%22 chkAutoSave:%22false%22 chkGenerateAnRssFeed:%22false%22 chkSaveEmptyTemplate:%22false%22 chkOpenInNewWindow:%22true%22 chkToggleLinks:%22false%22 chkHttpReadOnly:%22true%22 chkForceMinorUpdate:%22false%22 chkConfirmDelete:%22true%22 chkInsertTabs:%22false%22 chkUsePreForStorage:%22true%22 chkDisplayInstrumentation:%22false%22 chkRemoveExtraMarkers:%22false%22 txtBackupFolder:%22%22 txtEditorFocus:%22text%22 txtMainTab:%22Timeline%22 txtMoreTab:%22moreTabAll%22 txtMaxEditRows:%2230%22 txtFileSystemCharSet:%22UTF-8%22 txtTheme:%22%22 txtUserName:%22YourName%22
Вот что я получаю в чистом Хроме. Я также пробовал это в Vivaldi с установленным HTML5 Storage Manager All in One (расширение Chrome), и он показывает то же самое, за исключением случая, когда присутствуют 2 куки: консоль выдает ту же строку, что и выше (на document.cookie
) , расширение показывает
![2 cookies with same names and same values](https://i.stack.imgur.com/l6r1Q.png)
Этого не происходит в https://classic.tiddlywiki.com/ (удаление / редактирование работает как положено).
Теперь я решил, что для удаления начального файла cookie мне нужно было сделать
document.cookie = 'TiddlyWikiClassicOptions=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
и если я добавлю lalala
один, я также должен был сделать
document.cookie = 'TiddlyWikiClassicOptions=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
удалить второй.
Интересно, как я могу определить, какой путь мне следует использовать? document.cookie
, похоже, ничего не говорит о «объеме» каждого куки. Или это что-то введено в дизайн, и мне всегда нужно знать, какой cookie был назначен для какого пути?
PS Я видел сообщение, из-за которого у меня возникает такая же проблема с доменами ( это на русском языке ), поэтому мне интересно, как связать домен с файлом cookie.