위챗 공식 계정 삭제 쿠키 실패, 쿠키 설정 만료 시간이 소용없음, 위챗 공식 계정 쿠키는 비교적 괴이하다, 삭제할 수 없다, 해결 방법, 원생 JS 봉인 쿠키 통일 조작 삭제 쿠키 읽기, 삭제

회사의 프로젝트가 하나 있는데 수요는 다음과 같다. pc단의 프로젝트는 핸드폰에서 조작할 수 있는 절차가 있다. 페이지는 모두 같은 도메인 이름 아래에 있지만 pc단은 로그인해야 한다. (쿠키를 사용했다) 공중 계정은 로그인할 필요가 없다. (쿠키를 사용하지 않아도 된다) 서버가 어떻게 처리하는지 모르겠다. 이럴 때 쿠키 서버를 휴대하면 어떤 것을 제시할 수 있는지(중점이 아니다).프론트 데스크는 들어가서 작업할 때 쿠키를 제거해야 합니다.
이 쿠키가 어떻게 생겼는지에 대해 말하자면 pc의 주소를 위챗으로 직접 방문한 다음에 로그인하고 닫는다. (종료가 아니라 바로 닫는다. 쿠키는 지우지 않았다) 이때 공중번호로 그 중의 공중번호에 전문적으로 준비한 페이지를 방문한다. pc의 주소와 같은 도메인 이름 아래에 있을 때 쿠키가 존재한다.
해결 방안은 공식 계정에서 작업을 할 때 먼저 쿠키를 삭제한 다음에 조작을 하는 것이다. 정상적으로 말하자면 백엔드에서 쿠키를 받지 못할 것이다. 왜냐하면 쿠키가 기한이 지났기 때문에 존재하지 않는다. 그러나 백엔드에서 쿠키를 받을 수 있다는 것은 좀 이상하다.
쿠키는 봉인된 것입니다. 먼저 테스트를 통과한 정확한 코드입니다. 관심 있는 사람은 문제가 있는 코드를 아래로 볼 수 있습니다.
const setCookie = (name, value, expire = 60*60*24, domain=null) => {
  domain || (domain = window.location.host);
	let date = new Date();
	date.setSeconds(date.getSeconds() + expire);
	document.cookie = name + " = " + escape(value) + "; expires=" + date.toGMTString()+"; dommain=" + domain + "; path=/";
};
//  cookie
const getCookie = (name) => {
	var arr;
	const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
	arr = document.cookie.match(reg);
	if (arr) {
		return unescape(arr[2]);
	} else {
		return null;
	}
};
//  cookie
const readCookie = (name) => {
  let arr = null
  let reg = new RegExp('(^| )'+name+'=([^;]*)(;|$)')
  if (document.cookie && (arr = document.cookie.match(reg))) {
	return unescape(arr[2])
  } else {
	return null;
  }
}

const delCookie = (name, domain=null) => {
  domain || (domain = window.location.host);
	let exp = new Date();
	exp.setTime(exp.getTime() - 1);
	let cval = getCookie(name);
	if (cval != null) {
		document.cookie = name + " = " + cval + "; expires=" + exp.toGMTString()+"; dommain=" + domain + "; path=/";
	}
};
//    cookie
const clearAllCookie = (domain=null)=>{
  domain || (domain = window.location.host);
	let date = new Date();
	date.setTime(date.getTime() - 1);
	let keys = document.cookie.match(/[^ =;]+(?=\=)/g);
	if(keys){
		for(let i=keys.length;i--;){
			document.cookie = keys[i] + ` = 0; expires=${date.toGMTString()}; dommain=${domain}; path=/`;
		}
	}
}
export default {
	setCookie,
	getCookie,
	readCookie,
	delCookie,
	clearAllCookie
};

다음은 쿠키를 이상하게 만드는 코드입니다. 보시다시피domain과 path가 휴대하지 않았습니다. 아마도 위챗 브라우저 쪽에서 비교적 엄격하게 요구했을 것입니다. 그러나 이 코드는 pc측에 두는 것은 문제없습니다.
const setCookie = (name, value, expire) => {
	let date = new Date();
	date.setSeconds(date.getSeconds() + expire);
	document.cookie = name + " = " + escape(value) + "; expires=" + date.toGMTString();
};

const getCookie = (name) => {
	var arr;
	const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
	arr = document.cookie.match(reg);
	if (arr) {
		return unescape(arr[2]);
	} else {
		return null;
	}
};
//  cookies 
const readCookie = (name) => {
  let arr = null
  let reg = new RegExp('(^| )'+name+'=([^;]*)(;|$)')
  if (document.cookie && (arr = document.cookie.match(reg))) {
	return unescape(arr[2])
  } else {
	return null;
  } 
}

const delCookie = (name) => {
	let exp = new Date();
	exp.setTime(exp.getTime() - 1);
	let cval = getCookie(name);
	if (cval != null) {
		document.cookie = name + " = " + cval + "; expires=" + exp.toGMTString();
	}
};
//    cookie
const clearAllCookie = ()=>{
	let date = new Date();
	date.setTime(date.getTime() - 10000);
	document.write(document.cookie);
	let keys = document.cookie.match(/[^ =;]+(?=\=)/g);
	if(keys){
		for(let i=keys.length;i--;){
			document.cookie = keys[i] + `=0; expires=${date.toGMTString()};PATH=/`;
		}
	}
}
export default {
	setCookie,
	getCookie,
	readCookie,
	delCookie,
	clearAllCookie
};

좋은 웹페이지 즐겨찾기