谈谈跨域那些事
跨域是很多phper,jser都会遇到的一个问题.解决数据在不同域名之间传递有很多方法,比如jsonp,比如setcookie,写入redis做持久化存储等.关于用哪种方式去处理跨域问题,仁者见仁智者见智,我根据我实际问题来分析.
前段时间我遇到了两个域下面的系统之间保持登录状态和权限的需求.
问题描述和目标:a.test.com和b.test.com,在a.test.com登录后,去b.test.com拥有同样的登录状态和权限.
关于登录状态,在我的需求里面只是简单的需要传递用户登录名.权限方面由于项目刚起来,我对auth的划分比较粗糙,暂用简单的token方式来判断.
思路理清之后,开始技术选型.
有人第一个想到的就是cookie.cookie在客户端存储,可以被轻易篡改.但是如果我只是传递用户登录名,使用setcookie,并无什么安全性的担心.即使被改了,对于我们来说也并没有什么卵用.所以我暂定用cookie跨域.php代码如下:
// some codes about login.
setcookie("login_name", $username, time()+3600, "/", ".test.com");
我加在登录认证后去写cookie.
而在b.test.com里面,我去获取该cookie数值,php代码如下:
if (isset($_COOKIE['login_name'])) {
$username = $_COOKIE['login_name'];
// other logic codes
}
用户名的传递已经finish.还剩token的传递,如果使用cookie就显得不是非常安全,可以考虑jsonp和其他方式去存储token.
关于jsonp的用法,已经有很多人写过(互相抄,中国特色).以我的理解就是利用script元素可以跨域的特性,配合jsonpcallback实现.但是在我的场景里面,并不适合用jsonp,我想以更background方式去实现.于是我用了redis共享token.
实际上就是登录后写入redis,在b.test.com里面去读redis里面的同名key的value,写入当前域下的session.持久化存储永远是最安全的方法之一.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通