求解JS中的cookie保存问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解JS中的cookie保存问题相关的知识,希望对你有一定的参考价值。

大家先看看这个:
document.getElementById("img0").src = "images/main_set_image_button.png";
document.getElementById("img1").src = "images/main_set_sound_button.png";
document.getElementById("img2").src = "images/main_set_seek_button.png";
document.getElementById("img3").src = "images/main_set_net_button.png";
document.getElementById("apDiv5").innerHTML = "图像设置";
document.getElementById("apDiv7").innerHTML = "声音设置";
document.getElementById("apDiv9").innerHTML = "频道搜索";
document.getElementById("apDiv12").innerHTML = "网络设置";
我现在要做的就是存储img0,img1,img2,img3里面的图片名称信息,这些图片都是在不断变换的,所以我要进行下一步操作之前必须记住上一步存储了哪些信息,以便在返回上一步时可以恢复原来的网页,apDiv5,apDiv7,apDiv9,apDiv12是存放文字的层,同样里面的文字也是不断动态更换的,跟存储图片一样,我也要存储这些文字记住apDiv5,apDiv7,apDiv9,apDiv12里面都有一些什么,想来想去感觉只能用cookie存储,但具体不知道怎么弄,麻烦各位高人指教!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script type="text/javascript">
function setCookie(img,apDiv)

document.cookie="MyCookies="+escape(img+'|'+apDiv);

function readCookie()


var MyCookies=unescape(document.cookie.split('MyCookies=')[1].split(';')[0]);
return img:MyCookies.split('|')[0],apDiv:MyCookies.split('|')[1];


function Button1_click()

var img=new Array();
img[0]=document.getElementById("img0").src;
img[1]=document.getElementById("img1").src;
var apDiv=new Array();
apDiv[0]=document.getElementById("apDiv0").innerHTML;
apDiv[1]=document.getElementById("apDiv1").innerHTML;

setCookie(img.toString(),apDiv.toString());

function Button2_click()

var c=readCookie();
if(c.apDiv)

var img=c.img.split(',');
var apDiv=c.apDiv.split(',');
var str="";
for(i=0;i< img.length;i++)

str+=apDiv[i]+ "<img src='"+img[i]+"' /><br>";

document.getElementById("divR").innerHTML=str;



</script>
</head>
<body>
<div id="apDiv0">百度知道</div>
<img id="img0" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/logo-zhidao.gif" />
<div id="apDiv1">悬赏分</div>
<img id="img1" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/icn_point.gif" />
<div>
<input id="Button1" type="button" value="设置" onclick="Button1_click()" />
<input id="Button2" type="button" value="读取" onclick="Button2_click()" />
</div>
<div id="divR">

</div>
</body>
</html>
参考技术A 用jquery很好实现

express.js 和 react.js cookie 保存到浏览器但不工作?

【中文标题】express.js 和 react.js cookie 保存到浏览器但不工作?【英文标题】:express.js and react.js cookie saved to browser but not working? 【发布时间】:2021-04-05 03:52:37 【问题描述】:

我有一个使用 express.js 的后端服务器,我的前端使用 react,所以当我登录时,cookie 将保存在浏览器中,但由于某种原因,会话没有持久化,当我尝试访问一些来自某些需要身份验证的路由的信息将拒绝访问。我使用邮递员登录,它会毫无问题地保持会话并且可以访问需要身份验证的路由,所以前端肯定有一个问题,它不会被创建这里是我的代码:

后端:

var cors = require('cors')

app.use(cors(
  origin: 'http://localhost:3000',
  methods: ['POST', 'PUT', 'GET', 'OPTIONS', 'HEAD'],
  credentials: true
));

前端:

const postData = () =>   //this is for login
    const requestBody = 
      username: name,
      password: password,
    ;
    const config = 
      headers: 
        "Content-Type": "application/x-www-form-urlencoded",
      ,
      withCredentials: true,
      accept: "application/json",
    ;
    axios
      .post(`$myUrl/login`, qs.stringify(requestBody), config)
      .then((res) => 
        console.log(res.data);
      )
      .catch((e) => 
        console.log(e);
      );
  ;

const getData = async () =>  //to access some data that requires authentication
    axios
      .get(`$myUrl/edit`)
      .then((res) => 
        console.log(res.data);
      )
      .catch((e) => 
        console.log(e);
      );
  ;

当我使用前端登录时,我收到一条成功消息(成功登录),这意味着发布请求没有问题,CORS 只有一个问题,即前端,什么可能是问题?

PS:有趣的是cookie实际上保存在浏览器中,但是当我尝试访问一些需要身份验证的信息时,它拒绝访问!

【问题讨论】:

能否提供设置cookie的代码? 我使用 express-session 但正如我所说,即使在邮递员中创建 cookie 本身并将其保存到浏览器中也不是问题,我可以登录并保持会话。我认为服务器端代码没有任何问题。在使用 react 之前,我使用 ejs 作为模板,它工作得很好 你的浏览器有没有Cookie,你请求的时候后端能收到吗? 是的,我的浏览器有cookie(见上图),我的后端收到请求但拒绝访问(认为我还没有登录) 您可能需要调试为什么后端认为您的浏览器 cookie 无效。尝试先绕过认证,登录后从请求中获取cookie。 【参考方案1】:

尝试在获取请求中也将凭据设置为 true:

const getData = async () =>  //to access some data that requires authentication
    axios
      .get(`$myUrl/edit`,  withCredentials: true )
      .then((res) => 
        console.log(res.data);
      )
      .catch((e) => 
        console.log(e);
      );
  ;

【讨论】:

以上是关于求解JS中的cookie保存问题的主要内容,如果未能解决你的问题,请参考以下文章

js写cookie,如何完成其保存功能

使用prototype将查询参数保存到JS中的cookies

为暗模式/亮模式 JS 保存 cookie - 问题

js操作cookie

如何在每 24 小时后调用一个 JS 函数并将结果与​​时间戳一起保存在 cookie 中?

使用Angular.js中的cookie填充选择的相关下拉列表