同一个域中的多个Laravel 5项目

时间:2016-05-12 16:54:34

标签: php laravel session cookies laravel-5.2

我在同一个域上的子文件夹上运行了几个Laravel 5项目。

每个Laravel应用程序都会生成它自己的会话cookie,有时会产生很多,以至于我们在整个域上都会出现http 400错误。

我应该在所有这些项目之间共享存储文件夹,还是有任何设置可以防止这种情况发生?

5 个答案:

答案 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>