Laravel:在多个域上共享会话数据

Luu*_*gen 8 authentication session cross-domain laravel

我正在Laravel中构建一个多域/多商店电子商务应用程序,并且希望在用户从一个商店更改为商店时保持用户登录.

但据我所知,Laravel的Auth服务会将登录用户保存在会话中,其他域无法访问会话.

有没有办法(可能是一个包)来实现这一点,而不会让我的应用程序容易出现安全问题?

提前致谢!

小智 6

  1. 捕获Session::getId()域A中的会话ID
  2. 通过HTTP POST将捕获的会话ID发送到域B.
  3. 访问域B中发送的会话ID $sessionid_from_domainA = $_POST['session_from_A']
  4. 在域B中设置会话 Session::setId($sessionid_from_domainA)
  5. 在域B中启动会话 Session::start()


mat*_*eos 5

  1. 在域A上创建一个像这样的图像 <img src="https://DOMAINB.com/setcookie?id={{ Session::getId() }}" style="display:none;" />

  2. 在域B上创建一条路由,如下所示:

Route::get('setcookie', function(){
  Session::setId($_GET['id']);
  Session::start();
  return 'Cookie created';
});`
Run Code Online (Sandbox Code Playgroud)
  1. 完成,现在您应该可以吸引用户 $user = Auth::User;


小智 5

如果你想在多个子域之间共享会话,在这种情况下你必须设置域名 config/session.php 已经设置了域名。

示例:如果您有 new.example.com 和 test.example.com 那么您必须将域名设置为 example.com

'domain'     => env('SESSION_DOMAIN_URL','.example.com')
Run Code Online (Sandbox Code Playgroud)

那里的解决方案对我有用,特别是设置域,然后清除我的浏览器 cookie 和缓存。