2014-02-26 53 views
8

我正在研究除自定義php項目之外還需要工作的laravel項目,因爲我需要訪問laravel應用程序中的純php全局變量$ _SESSION和$ _COOKIE。

到現在爲止我只是空或空。有人知道如何做到這一點?

+1

在任何* PHP腳本中,您總是可以訪問像'$ _SESSION'或'$ _COOKIE'這樣的超全局變量(在HTTP SAPI上下文中,CLI可能會有所不同)。獲得NULL(或者空)意味着那些目前不被使用,這當然是可以的,因爲一些會話管理根本不能使用'$ _SESSION'。對於['$ _COOKIE'](http:// php。net/_cookie)它總是包含所有在HTTP請求時設置的cookie。請查閱Laravel的技術文檔,不是爲了某些樂趣而重寫這種超全球陣列。 – hakre

回答

4

Laravel有自己的實現$_SESSION$_COOKIE,所以我恐怕你不能通過這些超全球變量訪問它們。

要努力克服這一點,你可以做什麼,在你的Laravel應用,是通過執行類似數據從一個轉移到其他:

foreach(Session::all() $key => $value) 
{ 
    $_SESSION[$key] = $value; 
} 
+0

不幸的是,這對這個問題沒有幫助,因爲我需要在laravel應用程序中實現更改,因爲它很小且易於管理。但我知道這將有助於其他情況。謝謝! – gvsrepins

+0

它不怎麼樣?無論如何,我認爲這是迄今爲止最相關的答案。更多關於[Laravel's Docs - Session(4.2)](http://laravel.com/docs/4.2/session)。 – srph

+0

因爲在他的回答中,他展示瞭如何讓laravel會話對其他應用程序可見,什麼是非常有用的,但當時我需要的是相反的。如何在laravel應用程序中提供其他應用程序的會話。感謝我在這裏收到的答案,我可以做到這一點,並且是一件非常簡單的事情,如果你對此感到好奇,請檢查我自己的答案。 :) – gvsrepins

1

我有一個類似的問題與CakePHP的一對夫婦幾個月前。基本上,Cake應用程序中的會話變量完全獨立於我們擁有的定製應用程序中的會話變量。問題在於Cake使用與PHPSESSID不同的會話標識符。最後,我被迫通過強制Cake使用PHPSESSID來彌補差距。我對Laravel不太熟悉,但從我看到的(在他們的主站點上),他們似乎使用「laravel_session」而不是PHPSESSID。這很可能是你的問題,官方的Laravel論壇上似乎有一個topic about this

+0

謝謝!我會馬上查看它。 – gvsrepins

+0

在你所關聯的discution中有很大的材料,我可以用它解決這個問題。 – gvsrepins

0

Laravel有它自己的那些全局實現,但是你可以通過Symfony請求類來訪問它們 - 這是Laravel請求的父類。 Symfony正在直接與全局工作。

會議:

Request::getSession(); 

的Cookie:

$cookie = new ParameterBag($cookie_name); 
+0

ParameterBag如何起作用?我很抱歉,但我沒有看到與Cookie的關係。由Symfony文檔在這裏:http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/ParameterBag.html,你能幫我弄明白嗎? – gvsrepins

+0

我嘗試會話,但偷不工作,問題是,其他應用程序將會話保存在默認的php文件夾。和laravel應用程序在你自定義文件夾,如果我可以重寫laravel使用默認你的答案將是正確的。 – gvsrepins

1

用於會話的答案就是這麼簡單,我不相信在開始時,它會實際工作。

我在想,Laravel以某種方式覆蓋了正常PHP會話的默認行爲。也許在幕後宣佈自定義session_handler或其他魔法。

感謝所有我在這裏得到的答案,我發現Laravel根本沒有使用$ _SESSION,它實現了一個完全不同的驅動程序。

因此,有acesses到外部會議,我只是使用本地session_start()session_name()純PHP現在我已經接取到所有的數據,在全球$_SESSION保存在側面項目中使用相同的命名空間。

對於cookies,我無法弄清楚如何做到這一點,從Laravel應用程序:/。但只要有會話,我就可以繼續併合並應用程序。

+0

好聽,但我不明白當'''Session'''抽象存在時你必須使用''__SESSION'''的原因。 – srph

+0

@srph這是爲了使用從非laravel系統創建的$ _SESSION信息,這是需要這個特定的projetc。 – gvsrepins

0

我有類似的問題,沒有被設置laravel和Cookie :: get()返回null。這是因爲laravel加密了他們的cookies。您可以不包含EncryptCookies中間件以避免此問題。刪除\App\Http\Middleware\EncryptCookies::class from $middlewareGroupsapp\Http\Kernel.php