我在同一个域上的子文件夹上运行了几个Laravel 5项目。
每个Laravel应用程序都会生成它自己的会话cookie,有时会产生很多,以至于我们在整个域上都会出现http 400错误。
我应该在所有这些项目之间共享存储文件夹,还是有任何设置可以防止这种情况发生?
答案 0 :(得分:5)
每个Laravel安装都应位于其自己的目录中。
然后需要定义一个别名,将域子文件夹指向“子”Laravel文件夹。
Apache http.conf
中的示例:
<VirtualHost some.domain:80>
ServerName some.domain
## Path to laravel domain
DocumentRoot "/path/to/some/domain/laravel-1/public"
<Directory "/path/to/some/domain/laravel-1/public">
AllowOverride All
</Directory>
## Path to laravel sub-folder
Alias /laravel-2-path-alias/ "/path/to/some/domain/laravel-2/public"
<Directory "/path/to/some/domain/laravel-2/public">
AllowOverride All
</Directory>
</VirtualHost>
对于会话Cookie,请在两个安装中检查config\session.php
。
根安装config\session.php
:
'cookie' => 'a_unique_name'
'path' => '/',
子文件夹安装config\session.php
:
'cookie' => 'another_unique_name'
'path' => '/path/to/sub/folder',
这应该确保每个安装都在编写自己唯一的会话cookie。子应用程序生成的任何cookie都不应干扰父应用程序的cookie。
答案 1 :(得分:0)
我认为你需要为每个子文件夹都有一个唯一的安全密钥,并为每个子文件夹添加一个特殊的变量来改变生成的cookie
答案 2 :(得分:0)
你应该设置Homestead。它非常易于使用。 https://laravel.com/docs/5.2/homestead您可以设置多个域,例如:domain1.dev,domain2.dev。对于每个域,您将拥有自己的cookie。
答案 3 :(得分:0)
自从我找到解决方案后,请与我们分享。
首先,您需要使用Redis或数据库之类的共享会话驱动程序。
其次,你需要设置config / session.php,会话cookie和路径是一样的。
之后,您可以在同一个域上运行多个不同的Laravel项目,而不会出现cookie问题。
如果您的应用程序根本不需要会话,您可以在app / Http / Kernel.php上完全禁用会话,注释以下行:
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
答案 4 :(得分:0)
将httpd.conf文件编辑为
请检查路径是否因系统 / opt / lampp / htdocs / 或 / var / www / html /
而异## Path to laravel sub-folder
Alias /admin-boilerplate/ "/opt/lampp/htdocs/admin-boilerplate/public/"
<Directory "/opt/lampp/htdocs/admin-boilerplate/public">
AllowOverride All
</Directory>
您可能需要将公用文件夹中的.htaccess文件编辑为
RewriteBase /admin-boilerplate
完整代码如下
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# It enables routes when documrnt root set to public foder in httpd.conf file
# change name according to alias name
RewriteBase /admin-boilerplate
</IfModule>