更新一下:php
個人一個項目用的TP2.0開發的,如今要給這項目加一些功能,可是新功能我不想用TP開發了,laravel
想用Laravel,Laravel放在舊項目的一個子目錄裏,可是爲何沒法讀取TP的SESSION。git
我這樣說 會不會更明白一些。github
不要告訴存數據庫什麼的,存不存數據庫Laravel的Session都是二次處理過的。。。數據庫
有沒有人遇到過?json
兩個項目在同一臺服務器,同一個域名,不存在跨域,跨服務器問題,segmentfault
Laravel好像對session作了特殊處理。跨域
連var_dump($_SESSION)都會出現錯誤提示。服務器
config/session.php設置files和cookiecookie
只會把其餘項目的session給清除掉。。。
@kankana 在評論中回答了這個問題,
我這邊總結一下,也許之後有人會須要,
其實Laravel的session並非用PHP自帶的session管理器。而是完徹底全本身實現了一個。
注意是完徹底全本身實現的,並非傳統意義上用session_set_save_handler
自定義的session處理器。
因此解決 和另外一個ThinkPHP項目的session共用 的問題就很簡單了~
在Laravel中啓動PHP自帶的session就行了,也就是session_start。
這是他們的代碼註釋 "Note that the Laravel sessions do not make use of PHP "native" sessions in any way since they are crappy."
請記住Laravel在任何地方都沒有用到PHP「原生」的session,由於它很蹩腳。
好吧,我如今只要啓動蹩腳的session就行了。
by kankana
以上是如何從laravel訪問其餘程序的session.
如下,則是如何從外部訪問laravel的session (file).
當laravel的session driver設置爲file, 這些session files都是以json形式存放在app/storage/sessions裏面.
關鍵是,如何找到對應的session文件?
這個文件名是以加密形式存儲在cookie的laravel_session裏.
如何解密laravel_session獲取這個文件名?
1, 首先安裝這個庫:
https://github.com/illuminate/encryption
2, 獲取加密key
位於app/config/app.php 的 key
3,
$encrypter = new Illuminate\Encryption\Encrypter($key); $session_filename = $encrypter->decrypt($_COOKIE['laravel_session']);
大體如此.
ankana補充的已經差很少了, 我再多說下
內部解析 session 到明文:
1: 拿到 session_id
use Illuminate\Encryption\Encrypter; $encrypter = new Encrypter(Config::get('app.key')); $session_id = $encrypter->decrypt($_COOKIE[Config::get('session.cookie')]);
2: 讀取 session 內容
$handler = Session::getHandler(); $session = $handler->read($session_id); $session = unserialize($session);