使用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(),
]);
}
7条答案
按热度按时间5uzkadbs1#
找到了。更新session.php中的
domain => '.example.com'
并清除有问题的站点的cookie。ejk8hzay2#
@gadss
您需要添加如下会话表
并将.env更改为
SESSION_DRIVER=database
同时修改config/session.php
'driver' => env('SESSION_DRIVER', 'database')
和然后清除浏览器的缓存和cookie。
yqyhoc1h3#
您需要更新会话配置以在域范围内(包括子域)保持会话。请按照以下步骤操作。
1.转至**
config/session.php
,并将前缀为.
的domain
更新为config => '.your-domain.com'
。1.然后清除您的应用程序缓存,打开Chrome DevTool并转到应用程序〉应用程序〉清除存储**。您还需要清除之前的cookie。
1.运行Artisan命令**
php artisan config:cache
或php artisan config:clear
以删除以前缓存laravel应用程序配置。如果使用database作为会话驱动程序,则需要为此创建会话表。运行命令
php artisan session:table
以生成会话表移植,然后使用php artisan migrate
**进行移植。然后执行上面给出的三个步骤。lzfw57am4#
使用Laravel 8,操作更加简单:
将SESSION_DOMAIN添加到 .env 文件中:
清除配置缓存:
删除您的浏览器会话cookie,然后会话成为共享之间的所有子域。
在我的情况下,我曾经自动登录用户到子域一旦帐户是在www.domain上创建的。工作得很好。
lg40wkob5#
您是否尝试过将会话存储在数据库、memcached或redis中而不是文件中?我的情况与您类似,将会话存储在数据库中为我解决了这个问题。
由于某种原因,在使用文件驱动程序时,Laravel的会话驱动程序不能正确处理跨域会话。
z31licg06#
如果仍然有人遇到子域cookie的问题,请尝试更改config/session.php中的会话Cookie名称
cbeh67ev7#
如果某人需要同步子域中的会话,不同的laravel应用程序共享同一数据库
按照@Kiran Maniya的所有说明进行操作然后您必须保持相同的应用程序名称以获得相同的会话名称。或者只是更改
config/session.php
中的cookie配置如果无法保持相同名称,则可以对其进行硬编码。
转换为类似以下的内容: