子域名无法识别 PHP 会话

子域名无法识别 PHP 会话

我有一个网站,里面有用户数据库和登录表单。这个系统 100% 完美无缺。我有一个主站点,名称为www.example.com,子域名为accounts.example.com。当用户登录时,他或她会在主站点上登录www.example.com/login.php

要查看个人资料并进行编辑,他们点击链接进入accounts.example.com/profile.php?user=theirusername。页面加载时,如果他们正在查看自己的帐户,则应该显示一个编辑按钮。我这样做是这样的,<?php if($user == $dbusername){ echo"<a href='edit.php'>EDIT</a>";}。如果我转到 ,此功能可以正常工作www.example.com/Accounts/profile.php?user=theirusername,但在子域上它不起作用。accounts.example.com指向相同的路径www.example.com/Account/

我不知道为什么会发生这种情况,我使用的是标准 php SESSIONS。当我查看 Safari Inspector 中的 Cookies 选项卡时,它显示 1 SESSION accounts.example.com,。

有没有办法将 cookie “携带”到另一个子域?任何帮助都非常好!谢谢!

答案1

如果需要在子域www.example.com和子域中使用 cookie accounts.example.com,则需要在根域上设置example.com。您需要更改 PHP 设置会话.cookie_domain".example.com"

  1. 在 php.ini 中你可以session.cookie_domain = ".example.com"
  2. .htaccess 变体:php_value session.cookie_domain .example.com
  3. 或者在 PHP 脚本中:ini_set('session.cookie_domain', '.example.com' );

这是首选顺序:如果您有权访问服务器配置,则应在php.iniVirtualHost涉及的步骤中执行此操作。第三个选项是最糟糕的,因为您必须在每个 PHP 脚本上分别更改它。

相关内容