在Slim中坚持会话

时间:2015-01-20 17:10:36

标签: php slim

我正在使用Slim开发一个Web应用程序,但我遇到了设置和持久化会话的问题。

这是我的index.php。我正在尝试在csrfToken数组中设置$_SESSION密钥,以便通过应用程序发出的每个请求都会检查用户是否有csrfToken密钥,否则会创建一个

我很困惑为什么它不会持续存在,因为在下一个请求它已经消失了。正在调用session_start,它由'\ Slim \ Middleware \ SessionCookie'自动调用。

为什么这不起作用的任何想法?将它放入中间件或使用钩子会更好吗?

use duncan3dc\Laravel\Blade;
use duncan3dc\Helpers\Env;

# TODO: Bootstrap the app. Move this to a seperate file. Dev only.
R::setup('mysql:host=localhost;dbname=somedb','user','pass');

$app = new \Slim\Slim(array(
  'mode' => 'development',
  'templates.path' => './views',
  'cookies.encrypt' => true,
  'cookies.secret_key' => 'mylongsecretkey',
  'cookies.cipher' => MCRYPT_RIJNDAEL_256,
  'cookies.cipher_mode' => MCRYPT_MODE_CBC
));

$app->add(new \Slim\Middleware\SessionCookie(array(
  'expires' => '10 minutes',
  'path' => '/',
  'domain' => 'site.com',
  'secure' => false, # Contact client to discuss using SSL
  'httponly' => false,
  'name' => '_sus',
  'secret' => 'mylongsecretkey', # Do I need this twice?
  'cipher' => MCRYPT_RIJNDAEL_256,
  'cipher_mode' => MCRYPT_MODE_CBC
)));

# Not persisting ...
if(!isset($_SESSION['csrfToken']))
    $_SESSION['csrfToken'] = hash("sha512",mt_rand(0,mt_getrandmax()));

# TODO: Bootstrap these.
require 'routes/index.php';
require 'routes/dashboard.php';
require 'routes/signup.php';
require 'routes/contactus.php';
require 'routes/privacypolicy.php';
require 'routes/testimonials.php';
require 'routes/login.php';

$app->run();

1 个答案:

答案 0 :(得分:0)

我在阅读更多hooks之后想出了如何做到这一点。

$app->hook('slim.before.router', function() use ($app){
    if(!isset($_SESSION['csrfToken']))
        $_SESSION['csrfToken'] = hash("sha512",mt_rand(0,mt_getrandmax()));
});