使用5.0
在config / session.php中的我已设置'domain' => '.example.com'
但它无效。我不能在这样的一个域上坚持会议。
我的网站有很多子域名:
vancouver.example.com
newyork.example.com
等...它们托管在同一台服务器上,并且是相同的Laravel应用程序(共享相同的存储目录)
我使用正确的凭据登录,应用程序重定向到该网站上的另一个页面,此时我没有会话。 var_dump(Auth::user())
即使我使用正确的凭据登录,也会显示null
。
storage/framework/sessions
显示了14个不同的文件,它们都适合我,在我开始测试之前我将它们清除了。
我将在下面附上我的AuthController @ postLogin方法,如果session.php 'domain' => null
public function postLogin(Request $request)
{
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $request->only('email', 'password');
if ($this->auth->attempt($credentials, $request->has('remember'))) {
Session::flash('message', 'You are now logged in.');
Session::flash('status', 'success');
if (str_contains($_SERVER['HTTP_REFERER'], '?goto=')) {
$params = explode('?', $_SERVER['HTTP_REFERER'])[1];
$target = explode('=', $params)[1];
} else {
$target = '/';
}
return redirect($target);
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
答案 0 :(得分:38)
想出来。更新session.php中的domain => '.example.com'
并清除相关网站的Cookie。
答案 1 :(得分:13)
@gadss
你需要像这样添加会话表
php artisan session:table
composer dump-autoload
php artisan migrate
并将.env更改为
SESSION_DRIVER=database
还修改config / session.php
'driver' => env('SESSION_DRIVER', 'database')
和
'domain' => '.yourdomain.com'
之后清除浏览器的缓存和Cookie。
答案 2 :(得分:3)
您是否尝试将会话存储在数据库,memcached或redis中而不是存储在文件中?我遇到了类似的情况,在数据库中存储会话为我解决了问题。
由于某些原因,Laravel的会话驱动程序在使用文件驱动程序时无法正确处理跨域会话。
答案 3 :(得分:2)
使用 Laravel 8,它变得更加简单:
将 SESSION_DOMAIN 添加到您的 .env 文件中:
SESSION_DOMAIN=.yourdomain.tld
清除配置缓存:
php artisan config:cache
删除您的浏览器会话 cookie,然后会话在您的所有子域之间共享。
在我的情况下,一旦在 www 上创建帐户,我曾经自动登录用户到子域。领域。工作正常。
答案 4 :(得分:1)
如果仍然有人遇到子域Cookie的问题。尝试在config / session.php中更改会话Cookie名称
答案 5 :(得分:0)
您需要更新会话配置,以将会话保留在整个域(包括子域)中。请按照以下步骤操作。
转到 config/session.php
并使用前缀 domain
更新 .
为 config => '.your-domain.com'
。
然后清除您的应用程序缓存,打开Chrome DevTool并转到应用程序>应用程序>清除存储空间。您还需要清除以前的 cookies 。
运行工匠命令 php artisan config:cache
或 php artisan config:clear
删除先前缓存的laravel应用程序配置。
如果使用数据库作为会话驱动程序,则需要为此创建一个会话表。运行命令 php artisan session:table
生成会话表迁移,然后使用 php artisan migrate
迁移它。然后执行上面给出的三个步骤。