Silexを使用してREST APIを作成しようとしています。それは素晴らしい作業ですが、今私は、セッション変数を使用してユーザーを追跡したいと思っています。私は通常のPHPセッション変数とSessionServiceProviderを使用しようとしました。私の人生の間、セッション変数はページリクエストに対して永続的ではありません。私のテンポラリセッションフォルダを見ると、リクエストごとに新しいセッションが作成されているようです。AngularJSとPHPがリクエストごとに新しいセッションを作成します
私は$ appが初期化されているindex.phpファイルに多くのPHPファイルが含まれていますか?私はそれが何かと関係があるかどうかはわかりませんが、それは後続のコードが何をしているのかを理解するかもしれません。
のindex.php
<?php
require_once 'vendor/autoload.php';
$config['displayErrorDetails'] = true;
$app = new Silex\Application();
$app->register(new Silex\Provider\SessionServiceProvider, array('session.storage.save_path' => dirname(__DIR__) . '/tmp'));
$app->before(function() use ($app){
$app['session']->start();
});
require "../apiSource/classes/employees.php";
$app->run();
employees.php私の角度アプリのポストコールに '{URL} /従業員が/ログイン' セッション変数が設定されている
<?php
use Symfony\Component\HttpFoundation\JsonResponse as JsonResponse;
use Symfony\Component\HttpFoundation\Request as Request;
class Employees
{
private $database;
function __construct()
{
$this->database = getDB();
}
function loginEmployee($loginInfo, $app){
//.... check loginInfo with database of employee ....///
if ($isEmployee) {
$app['session']->set('userID', $employee['e_ID']);
return array('success' => 'success', 'e_ID' => $employee['e_ID'], 'session' => $app['session']->get('userID'));
//SUCCESS
} else {
return array('message' => 'Error.');
}
}
function isLoggedIn($app){
$stmt = $this->database->prepare("SELECT e_ID, e_Email FROM Employee WHERE e_ID = ?");
$stmt->execute(array($app['session']->get('userID')));
$employee = $stmt->fetch(PDO::FETCH_ASSOC);
if(empty($employee)){
return array('Error' => $employee, 'Session' => $app['session']->get('userID'));
}
return $employee;
}
function logout($app){
$app['session']->remove('userID');
return array('success' => 'success');
}
}
$app->get('/employees/logout', function() use ($app) {
$employees = new Employees();
$results = $employees->logout($app);
return new JsonResponse($results);
});
$app->get('/employees/status', function() use ($app) {
$employees = new Employees();
$results = $employees->isLoggedIn($app);
return new JsonResponse($results);
});
$app->post('/employees/login', function(Request $request) use ($app) {
$data = json_decode($request->getContent(), true);
$request->request->replace(is_array($data) ? $data : array());
$employee = new Employees();
$results = $employee->loginEmployee($data, $app);
return new JsonResponse($results);
});
、それはリターンを行いますセッション['userID']。しかし、その直後に私が '{url}/employees/status'を呼び出してユーザーがログインしているかどうかを確認すると、セッション変数は空になります。セッション変数が保存されているtmpフォルダには、すべてのリクエストに対して作成された新しいファイルがあります。
私は間違っていますか?どんな助けもありがとう。
ありがとうございます!
EDIT
私は何が起こっているかを見るためにここに物事を単純化しようとしています。それは私の角度のあるページの投稿と私の意味を悪いものでなければなりません。
のindex.php
$app->get('/hello', function() use ($app){
session_start();
$num = $_SESSION['idea'] ? $_SESSION['idea'] : 1;
$_SESSION['idea'] = $num+1;
echoResponse(200, $_SESSION['idea']);
});
私はちょうどそのページを訪問し、リフレッシュを打っておく場合は、私のセッション変数が働いていると、それは常に1で上がっています。したがって、セッション変数は動作しています。
は、しかし、私は私の角度アプリから、このページを呼び出すしようとすると:
$scope.hello = function(){
$http.get('https://viromo.com/cubex/api/hello').then(function(results){
console.log(results);
})
};
結果インクリメントアウトと同じ番号をバック掲示し続けます。なぜこれが起こっているのか分かりません。私はタイトルとタグを更新して、私の質問の目標をよりよく反映させました。
ありがとうございます!
かもしれクッキーは –
あなたはDEVを使用してPHPSESSIDを確認しました。..無効になっています。あなたのブラウザのツール?値はページ間で変化しますか? – mTorres
ミドルウェアから$ app ['session'] - > start()を削除しようとしましたか?このhttp://silex.sensiolabs.org/doc/providers/session.htmlによると、必要ではないようです。 –