PHP session跨域问题

项目前后端分离,后端PHP开启本地80端口,前端Vue开启另外的接口。

做登录时,登录成功以后后端 login.php 将 userid 存到 session,跳转到首页后,后台 check.php 获取 userid。
此时已经跨域,获取不到 userid。

目前我想到的其他办法是在登录成功后,在数据库新表对应userid下新增一个过期时间,每次请求的时候,都拿当前时间跟数据库过期时间对比,过期则跳转登录,不过期则更新过期时间。

想问下各位有什么更好的解决办法吗?

阅读 4.9k
5 个回答

session存入redis?

用nginx代理前端页面和后台php接口地址,这样就没有跨域了

前端在vue项目中设置 axios的withCredentials 为 true,后端设置允许CORS跨域
参考下这个文章看看能不能行:https://www.cnblogs.com/eleve...

先检查一下代码,没看到有跨域的问题。

这个问题应该改为 PHP Cookie 跨域问题,因为 PHP 的 Session 是通过 cookie 来定位的,Cookie和Session的联系参考 都9102年了,还问Session和Cookie的区别

有两个解决方法

方法1: 通过 nginx 实现同域

例如 nginx 开 80 端口,PHP 使用 FPM 开启 9000 端口,前端开启 8000 端口

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass  http://127.0.0.1:8000;
    }

    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

这样 url 中带有 .php 的就去请求 PHP 接口,其他走前端接口

方法2: 自己实现 Session 功能

使用 redis 等软件存储用户数据,然后前端每次请求都带一个相同的 Token,后端使用这个 Token 去存储中获取对应的数据

推荐问题
宣传栏