002--第一次成功删除之后,后续的删除会脏数据读取到第一次的记录信息id

本文探讨了在使用Datagrid组件时出现的一个常见问题:在成功删除一条记录后,未重新选择记录时仍会弹出删除确认对话框,并尝试删除之前已删除的数据。文中提供了一种解决方案,即在每次删除操作后清空Datagrid的选择状态。

点击删除按钮之后,成功删除某条记录信息,然后当我们第二次再次进行删除的时候,没有勾选任何记录信息,但是却会出现提示框,是否要进行删除,Debug模式下发现:
我们每当第一次删除成功之后,第二次,第三次等等在不选择任何信息记录的情况下,后续的删除都会获取到第一次删除的信息id,所以我们需要在每次删除之后,进行清除勾选状态:

$('#wisequantitydg').datagrid('clearSelections');

说明:wisequantitydg为jsp页面的table的占位id

### Java中Set-Cookie后首次请求无法获取Cookie的问题及解决方案 #### 问题分析 在Java中,`Set-Cookie` 响应头用于向客户端发送Cookie信息。然而,在首次访问时,浏览器可能无法立即读取到该Cookie[^2]。这是因为当服务器设置Cookie时,浏览器会在下一次请求中将该Cookie发送回服务器。因此,在首次请求时,由于Cookie尚未被浏览器存储并发送回服务器,导致无法读取到Cookie。 此外,跨域请求可能导致 `Set-Cookie` 失效,因为浏览器默认不会将Cookie携带到跨域请求中,除非明确允许[^4]。 --- #### 解决方案 ##### 1. 确保响应头正确设置 如果响应头未正确设置,可能导致浏览器无法识别或存储Cookie。例如,`Secure` 和 `HttpOnly` 属性需要根据实际需求正确配置。 ```java // 设置Secure和HttpOnly属性 Cookie cookie = new Cookie("example", "value"); cookie.setPath("/"); cookie.setMaxAge(3600); // 设置有效期为1小时 cookie.setSecure(true); // 仅通过HTTPS传输 cookie.setHttpOnly(true); // 防止JavaScript访问 response.addCookie(cookie); ``` --- ##### 2. 处理跨域问题 在前后端分离的项目中,跨域请求可能导致 `Set-Cookie` 失效。这是因为浏览器默认不会将Cookie携带到跨域请求中,除非明确允许。 在Spring Boot中,可以通过以下方式允许跨域并携带Cookie: ```java @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("https://example.com") // 允许的域名 .allowCredentials(true); // 允许携带Cookie } }; } ``` --- ##### 3. 检查Nginx代理配置 如果使用Nginx作为反向代理,可能需要调整Nginx配置以确保 `Set-Cookie` 正常传递给客户端。可以通过 `proxy_hide_header` 或 `proxy_pass_header` 控制响应头的传递[^1]。 ```nginx # Nginx配置示例 location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass_header Set-Cookie; // 确保Set-Cookie传递给客户端 } ``` --- ##### 4. 手动处理Cookie 在某些场景下,如微信小程序登录流程,需要手动处理Cookie的存储与传递。可以将 `Set-Cookie` 的值存储到本地缓存,并在每次请求中附加到Header中[^3]。 ```javascript // 微信小程序示例:存储并传递Cookie wx.request({ url: 'https://example.com/api/login', method: 'POST', data: { username: 'test', password: 'password' }, success(res) { const cookies = res.header['Set-Cookie']; wx.setStorageSync('cookies', cookies); // 存储Cookie } }); // 后续请求中附加Cookie wx.request({ url: 'https://example.com/api/data', header: { Cookie: wx.getStorageSync('cookies') }, success(res) { console.log(res.data); } }); ``` --- ##### 5. 防止会话Cookie丢失 在某些情况下,如用户频繁刷新页面或切换设备,可能导致会话Cookie丢失。可以通过延长Cookie有效期或结合Token机制增强会话管理[^2]。 ```java // 延长Cookie有效期 Cookie cookie = new Cookie("session_id", "12345"); cookie.setMaxAge(86400); // 设置有效期为1天 response.addCookie(cookie); ``` --- #### 注意事项 - 确保服务器和客户端的时间同步,避免因时间差异导致Cookie过期。 - 如果涉及敏感数据,必须启用 `Secure` 和 `HttpOnly` 属性,以防止Cookie被窃取或篡改。 - 在开发和测试阶段,检查浏览器的开发者工具(Network选项卡)以验证 `Set-Cookie` 是否正确返回并存储。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值