2015-01-09 42 views
3

這是我的index.php修身SessionCookie中間件不工作

<?php 
$app = new \Slim\Slim(
    array(
     'templates.path' => dirname(__FILE__).'/templates' 
    ) 
); 

// Add session cookie middle-ware. Shouldn't this create a cookie? 
$app->add(new \Slim\Middleware\SessionCookie()); 

// Add a custom middle-ware 
$app->add(new \CustomMiddleware()); 

$app->get(
    '/', 
    function() use ($app) { 
     $app->render('Home.php'); 
    } 
); 

$app->run(); 
?> 

這是我自定義的中間件:

<?php 
class CustomMiddleware extends \Slim\Middleware { 
    public function call() { 
     // This session variable should be saved 
     $_SESSION['test'] = 'Hello!'; 

     $this->next->call(); 
    } 
} 
?> 

這是我的模板(Home.php

<?php 
var_dump($_SESSION['test']); 
?> 

它將輸出NULL,所以會話變量不會被保存。另外,在導航器中打開Cookie列表時,我沒有看到任何內容。爲什麼不保存會話的cookie?我驗證並確保執行SessionCookie類的call()函數。

+0

我之前沒有使用slim,但可能是在設置任何變量之前聲明'session_start();'的簡單情況。 – Alex 2015-01-09 20:53:00

+0

你可以確定調用方法調用SessionCookie vs CustomMiddleware的順序嗎?看着源代碼https://github.com/codeguy/Slim/blob/master/Slim/Middleware/SessionCookie.php#L132,似乎如果沒有設置cookie $ _SESSION被重置。 – litechip 2015-01-09 21:19:54

+0

我發現這一行:'ini_set('session.use_cookies',0);'。看起來像cookies的使用被禁用。 CustomMiddleware在SessionCookie之前調用,但即使我之後調用它,在我刷新 – ali 2015-01-09 21:40:03

回答

3

如何在Slim\Middleware\SessionCookie之前先添加您的CustomMiddleware

事情是這樣的:

require 'Slim/Slim.php'; 

Slim\Slim::registerAutoloader(); 

class CustomMiddleware extends Slim\Middleware 
{ 
    public function call() { 
     // This session variable should be saved 
     $_SESSION['test'] = 'Hello!'; 

     $this->next->call(); 
    } 
} 

$app = new Slim\Slim(); 

$app->add(new CustomMiddleware()); 

$app->add(new Slim\Middleware\SessionCookie()); 

// GET route 
$app->get('/', function() use ($app) 
{ 
    $app->render('home.php'); 
}); 

$app->run(); 

而且你home.php模板文件:

<?php echo($_SESSION['test']); ?> 

對於我來說,它完美的作品。但如果我在CustomMiddleware之前加上Slim\Middleware\SessionCookie,則$_SESSION['test']的輸出仍爲NULL

這是中間件是如何工作的:

Middleware

所以,你的反應將永遠不會得到任何$_SESSION價值,因爲你設定$_SESSIONSessionCookie調用之前。