浏览器没有传递cookie给后台

本文讲述了在实现cookie验证功能过程中遇到的挑战,包括后台直接设置cookie、跨域问题、httpOnly属性的安全考量,以及不同浏览器版本对cookie的影响。通过调整策略和解决技术难题,最终实现了cookie的有效验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.cookie验证
本身这是个简单的功能,后台给我cookie我再传回去不就好了嘛
结果!!!cookie原来不是放在登陆接口给我的,而是后台直接设置的cookie
那就改变策略,我在全局接口请求头里获取cookie,加上’Authorization’: Cookies.get(‘JSESSIONID’),完美啊~
然而。。。拿不到cookie,why!why!why!开始进入迷宫,经过搜索,后台设置cookie可能限制了域名啊,http啊,缠着后台改了path,domain,httpOnly,可是,httpOnly放开后就有安全隐患了,那是为了什么要做cookie验证了
重新换思路,既然后台传了cookie,那为啥我拿不到呢
浏览器应该主动传递cookie的呀,为啥我在浏览器上看不到呢?为啥抓包工具又能看到呢?待我一番百度,原来是chrome版本惹的祸,怪我版本高喽
在这里插入图片描述

在这里插入图片描述
解决

### 使用 `uni.uploadFile` 上传文件时携 Cookie 的配置方法 在前端开发中,当使用 `uni.uploadFile` 方法上传文件时,默认情况下不会自动附用户的登录状态(即 Cookie)。如果需要实现这一功能,则需考虑以下几个方面: #### 1. **跨域问题** 由于前后端分离架构的存在,通常会遇到跨域请求的情况。在这种场景下,浏览器默认不会发送存储的 Cookie 到目标服务器。为了使浏览器能够正常发送 Cookie,在发起请求前,必须满足以下两个条件之一[^2]: - 后端设置响应头 `Access-Control-Allow-Credentials: true` 并允许特定域名访问。 - 前端通过 API 请求时显式指定参数 `withCredentials: true`。 对于 `uni.uploadFile` 而言,其本身并不支持直接传递 `withCredentials` 参数。因此,可以通过调整后端 CORS 配置来解决此问题。 #### 2. **手动附加 Cookie** 如果无法修改后端 CORS 设置或希望更灵活地控制 Cookie 发送行为,可以尝试手动将必要的身份验证信息作为额外数据提交给后台处理程序。例如,利用 `formData` 字段向服务器提供用户令牌或其他认证标志代替传统意义上的 Cookies: ```javascript uni.chooseImage({ success: (chooseImageRes) => { const tempFilePaths = chooseImageRes.tempFilePaths; // 获取当前页面中的 session 或 token 数据 let userToken = uni.getStorageSync('user_token'); uni.uploadFile({ url: 'https://www.example.com/upload', filePath: tempFilePaths[0], name: 'file', formData: { 'user': 'test', 'token': userToken // 手动加入 Token/SessionID 等替代品 }, success: (uploadFileRes) => { console.log(uploadFileRes.data); } }); } }); ``` 此处需要注意的是,实际项目里应替换 `'https://www.example.com/upload'` 和逻辑部分以适配具体业务需求[^1]。 #### 3. **借助自定义封装工具类** 另一种更为优雅的方式是创建统一管理 HTTP 请求的服务模块,并在此基础上扩展文件上传能力。这样不仅可以简化代码结构还能增强可维护性和重用率。下面是一个简单的例子展示如何基于 Axios 实现类似的机制[^3]: ```javascript // utils/http.js 文件内容片段 import axios from 'axios'; const instance = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000, withCredentials: true, // 开启凭证共享开关 }); export function httpUploadFile(options){ return new Promise((resolve,reject)=>{ var formdata=new FormData(); Object.keys(options.formData).forEach(key=>{ formdata.append(key,options.formData[key]); }); options.headers={ ...options.headers, ['Content-Type']:undefined,//让浏览器自行判断MIME类型 }; instance.post('/api/v1/files/upload',formdata,{ headers:{ Authorization:`Bearer ${localStorage.getItem("access_token")}` , } }).then(response=>resolve(response)).catch(error=>reject(error)); }) } ``` 最后记得挂载到全局 Vue 对象以便于组件内部调用: ```javascript Vue.prototype.$http=http ; Vue.prototype.$httpUploadFile=httpUploadFile ; ``` 以上就是关于如何在 UniApp 中使用 `uni.uploadFile` 进行文件上传的同时Cookie 的解决方案探讨。具体情况还需要依据项目的实际情况做适当调整优化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值