lightarhont
@lightarhont
python/php developer

Как удалить куки?

Что то непонятное творится с удалением кук:

Есть Кука:
"auth_tkt="761c804687064626d4efd7016a3202bf555c67b21!userid_type:int"; auth_tkt="761c804687064626d4efd7016a3202bf555c67b21!userid_type:int""

удаляю с помощью функции:
function delete_cookie( name ) {
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
Результат первая удаляется вторая остаётся.
Удаляю с помощью $.cookie
$.removeCookie('auth_tkt');
тоже самое.

Возвращаю вторую оставшуюся куку:

function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}

getCookie('auth_tkt'); => ""761c804687064626d4efd7016a3202bf555c67b21!userid_type:int""

Что за байда не могу понять никак. Но не javascript, серверным путём куки удаляются нормально.
Вопрос только в том что я строю одно страничное приложение-сайт и мне нужно именно через JS.

Решено вот таким образом:

function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}


function Delete_Cookie( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}


Запускаю две функции:
Delete_Cookie('auth_tkt', '/', 'testproject.python')
Delete_Cookie('auth_tkt', '/')
может для уверенности нужно ещё:
Delete_Cookie('auth_tkt', '/', '.testproject.python')

Удаляет...
  • Вопрос задан
  • 2182 просмотра
Решения вопроса 1
miraage
@miraage
Старый прогер
Если значение куки можно получить в JS - значит она не HttpOnly.

Проверьте path/domain.
Проверьте, может бэкенд ее форсит при каждом запросе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Scorpi
@Scorpi
Может эта кука HTTP Only?
Ответ написан
@YakovLitvin
Сталкивался со схожими симптомами, помогло

document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
document.cookie = name + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';

надо следить за "scope"ом куки – правда, я пока не понял, как его посмотреть (история в деталях – тут).
Ну да, по ходу, это две аналогичные проблемы, одна для доменов, другая – для путей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект