如何将cookie的名称和值序列化为JavaScript中的Set-Cookie头字符串
在本文中,您将了解如何将带有名称和值的cookie序列化为Set-Cookie头字符串。基本上,我们在这里尝试通过兼容的set-cookie字符串格式传递cookie。
Cookie: Cookie是由Web服务器在用户浏览网站时创建的小块数据,并存储在用户计算机上供将来使用。
Set-Cookie: 用于通过Web服务器在用户系统上设置cookie的HTTP响应头。
语法:
Set-Cookie : <cookie-name> = <cookie-value>
其中,
<cookie-name>
可以包含除以下字符以外的任意字符:
( ) < > @ , ; : \ " / [ ] ? = { }
<cookie-value>
可以加引号,也可以不加。
方法: 要序列化这个cookie,我们可以使用javascript中的一个方法, encodeURIComponent() 。encodeURIComponent()函数通过用表示字符的UTF-8编码的一个、两个、三个或四个转义序列替换每个字符来对URI进行编码。因此,这将帮助我们替换所有不兼容的字符。
示例:
encodeURIComponent(‘G F G’) // 输出 : G%20F%20G
我们需要创建一个名为 serializeCookie 的函数,它接受两个参数: cookie_name 和 cookie_value 。
function serializeCookie(cookie_name , cookie_value){ … }
该函数返回以下格式的字符串: < cookie-name>=<cookie-value> with encodeURIComponent()
,如下所示:
function serializeCookie(cookie_name , cookie_value){
return `{encodeURIComponent(cookie_name)}={encodeURIComponent(cookie_value)}`;
}
示例1: 以下是上述方法的实现:
HTML
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1 style="color:green">
GeeksForGeeks</h1>
<h3>How to serialize a cookie name-value
pair into a Set-Cookie header string in JavaScript?</h3>
</body>
<script>
const serializeCookie = (name, val) =>
`{encodeURIComponent(name)}={encodeURIComponent(val)}`;
document.body.append(serializeCookie('foo', 'bar'));
</script>
</html>
输出:
解释: foo是<cookie-name>
,bar是使用箭头函数serializeCookie()进行编码的<cookie-value>
,编码结果为foo=bar。
示例2: 这里你正在创建一个完整的Set-Cookie头部:
HTML
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1 style="color:green">
GeeksForGeeks</h1>
<h3>How to serialize a cookie name-value pair
into a Set-Cookie header string in JavaScript?</h3>
</body>
<script>
const serializeCookie = (name, val) =>
`{encodeURIComponent(name)}={encodeURIComponent(val)}`;
document.body.append(`{serializeCookie('foo', 'bar')};
{serializeCookie('Path', 'http://example.com/path/to/page')};
Secure;{serializeCookie('Expires', 'Wed, 21 Oct 2015 07:28:00 GMT')};
HttpOnly;{serializeCookie('SameSite', 'Lax')}`);
</script>
</html>
输出 :
解释: 使用与上面相同的方法,其中有一个serializeCookie函数,它返回一个完整的Set-Cookie头值,其中包含以序列化形式的参数,例如path,Secure和HttpOnly。