如何解决跨域设置Cookie失效导致的跨域资源共享问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1125个文字,预计阅读时间需要5分钟。
目录问题出现场景代码实现如下登录接口相关代码问题出现的解决方法如下反思和结语问题出现场景在实现登录功能时,希望将用户信息通过Set-Cookie在客户端设置cookie信息。
代码实现如下pythondef login(username, password): # 模拟用户验证过程 if username==user and password==pass: response=make_response(登录成功) response.set_cookie('username', username) return response else: return 用户名或密码错误
登录接口相关代码python@app.route('/login', methods=['POST'])def login(): username=request.form['username'] password=request.form['password'] return login(username, password)
问题出现的解决方法如下
1.确保用户名和密码验证逻辑正确。
2.使用`make_response`创建响应对象,并通过`set_cookie`方法设置cookie。
3.在客户端接收到响应后,检查cookie是否正确设置。
反思和结语
在处理登录功能时,正确设置cookie对于保持用户会话非常重要。在实现过程中,要注意验证逻辑和响应对象的使用,确保用户信息的安全和正确传递。目录
- 问题出现场景
- 代码实现如下
- 登陆接口相关代码
- 问题出现的解决方案如下
- 反思和结语
问题出现场景
在做登录功能时,想把用户的信息通过Set-cookie在客户端设置cookie信息。
1.服务端通过cors中间件实现接口跨域访问、koa-session-minimal实现cookie的设置。
代码实现如下
const session = require('koa-session-minimal') const cors = require('@koa/cors'); // app.js const app = new Koa() app.use(cors()) // 存放sessionId的cookie配置, 相关的一些字段配置说明可以查看localhost:9529', credentials: true }; app.use(cors(koaOptions))
2.于是本人胸有成竹的开启了新一遍的流程测试,想必这次是能成功的。经过了几S的流程测试之后,我得到了一个结果:失败是成功之母。
显然我们这次又未在Application的cookie中找到我们想要的SESSION_ID字段,我再次沉浸式的翻阅了MDN的cookie相关文档。
3.发现文档中其实是有写到:Access-Control-Allow-Credentials标头需要与XMLHttpRequest.withCredentials或 Fetch API 的Request()构造函数中的credentials选项结合使用。
Credentials 必须在前后端都被配置(即Access-Control-Allow-Credentialsheader 和 XHR 或 Fetch request 中都要配置)才能使带 credentials 的 CORS 请求成功。
XMLHttpRequest.withCredentials属性是一个布尔类型,它指示了是否该使用类似 Cookies、Authorization Headers (头部授权) 或者 TLS 客户端证书这一类资格证书来创建一个跨站点访问控制(cross-siteAccess-Control)请求。
在同一个站点下使用withCredentials属性是无效的。此外也会被用做响应中Cookies 被忽视的标示。默认值是 false。
如果在发送来自其他域的 XMLHttpRequest 请求之前,未设置withCredentials为 true,那么就不能为它自己的域设置 Cookie 值。
而通过设置withCredentials为 true 获得的第三方 Cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问。(这段文字是来自MDN文档)。
4.根据以上信息,我调整了前端项目封装的request模块代码,将withCredentiaols设置成了true:
const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url withCredentials: true, // send cookies when cross-domain requests timeout: 5000 // request timeout })
再一次的进行我们的流程测试,果然功夫不负有心人,终于是在Application中看到了心心念的SESSION_ID:
反思和结语
踏破铁鞋无觅处,得来全不费工夫。我们在遇见问题的时候,应该尽量从问题的本质出发寻找突破口,试着从另一个角度切入。
其次就是对相关知识的掌握程度,我在这次的遇见问题和解决问题的过程中做出了反思,确实有寻找到突破口:浏览器的同源策略限制。
但是对其相关的策略掌握不够深入,导致花费了比正常多几倍的时间去解决问题,经过这次的文档查阅,我对跨域设置cookie以及浏览器同源限制策略,有了更进一步的认知。
以上就是跨域设置Cookie失效问题解决方案原理分析的详细内容,更多关于跨域设置Cookie失效解决的资料请关注易盾网络其它相关文章!
本文共计1125个文字,预计阅读时间需要5分钟。
目录问题出现场景代码实现如下登录接口相关代码问题出现的解决方法如下反思和结语问题出现场景在实现登录功能时,希望将用户信息通过Set-Cookie在客户端设置cookie信息。
代码实现如下pythondef login(username, password): # 模拟用户验证过程 if username==user and password==pass: response=make_response(登录成功) response.set_cookie('username', username) return response else: return 用户名或密码错误
登录接口相关代码python@app.route('/login', methods=['POST'])def login(): username=request.form['username'] password=request.form['password'] return login(username, password)
问题出现的解决方法如下
1.确保用户名和密码验证逻辑正确。
2.使用`make_response`创建响应对象,并通过`set_cookie`方法设置cookie。
3.在客户端接收到响应后,检查cookie是否正确设置。
反思和结语
在处理登录功能时,正确设置cookie对于保持用户会话非常重要。在实现过程中,要注意验证逻辑和响应对象的使用,确保用户信息的安全和正确传递。目录
- 问题出现场景
- 代码实现如下
- 登陆接口相关代码
- 问题出现的解决方案如下
- 反思和结语
问题出现场景
在做登录功能时,想把用户的信息通过Set-cookie在客户端设置cookie信息。
1.服务端通过cors中间件实现接口跨域访问、koa-session-minimal实现cookie的设置。
代码实现如下
const session = require('koa-session-minimal') const cors = require('@koa/cors'); // app.js const app = new Koa() app.use(cors()) // 存放sessionId的cookie配置, 相关的一些字段配置说明可以查看localhost:9529', credentials: true }; app.use(cors(koaOptions))
2.于是本人胸有成竹的开启了新一遍的流程测试,想必这次是能成功的。经过了几S的流程测试之后,我得到了一个结果:失败是成功之母。
显然我们这次又未在Application的cookie中找到我们想要的SESSION_ID字段,我再次沉浸式的翻阅了MDN的cookie相关文档。
3.发现文档中其实是有写到:Access-Control-Allow-Credentials标头需要与XMLHttpRequest.withCredentials或 Fetch API 的Request()构造函数中的credentials选项结合使用。
Credentials 必须在前后端都被配置(即Access-Control-Allow-Credentialsheader 和 XHR 或 Fetch request 中都要配置)才能使带 credentials 的 CORS 请求成功。
XMLHttpRequest.withCredentials属性是一个布尔类型,它指示了是否该使用类似 Cookies、Authorization Headers (头部授权) 或者 TLS 客户端证书这一类资格证书来创建一个跨站点访问控制(cross-siteAccess-Control)请求。
在同一个站点下使用withCredentials属性是无效的。此外也会被用做响应中Cookies 被忽视的标示。默认值是 false。
如果在发送来自其他域的 XMLHttpRequest 请求之前,未设置withCredentials为 true,那么就不能为它自己的域设置 Cookie 值。
而通过设置withCredentials为 true 获得的第三方 Cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问。(这段文字是来自MDN文档)。
4.根据以上信息,我调整了前端项目封装的request模块代码,将withCredentiaols设置成了true:
const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url withCredentials: true, // send cookies when cross-domain requests timeout: 5000 // request timeout })
再一次的进行我们的流程测试,果然功夫不负有心人,终于是在Application中看到了心心念的SESSION_ID:
反思和结语
踏破铁鞋无觅处,得来全不费工夫。我们在遇见问题的时候,应该尽量从问题的本质出发寻找突破口,试着从另一个角度切入。
其次就是对相关知识的掌握程度,我在这次的遇见问题和解决问题的过程中做出了反思,确实有寻找到突破口:浏览器的同源策略限制。
但是对其相关的策略掌握不够深入,导致花费了比正常多几倍的时间去解决问题,经过这次的文档查阅,我对跨域设置cookie以及浏览器同源限制策略,有了更进一步的认知。
以上就是跨域设置Cookie失效问题解决方案原理分析的详细内容,更多关于跨域设置Cookie失效解决的资料请关注易盾网络其它相关文章!

