4

ネイティブPHPの単純な関数

protected function some_function(){
    session_start();
    if(!isset($_SESSION['a']))
    {
        $_SESSION['a'] = 'some value';
        return true;
    } else {
        return $_SESSION['a'];
    }
 }

最初の実行では、bool(true)を返し、その後"some value"期待どおりに戻ります。

同じことをlaravelセッションに適用すると、

protected function some_function(){ 
    $a = Session::get('abc');
    if(is_null($a)){
        Session::put('abc', 'some value');
        //return Session::get('abc');
        return true;
    } else {
        return $a;
    }
 }

論理的には、最初の実行では、$aはになりますnull。次に"some value"abcキーを入力して、期待どおりにbool(true)を返します。

ただし、結果としてアクセスすると、Session::get('abc') 毎回nullが返されます。したがって、すべての試行でbool(true)が返されます。

セッションが正しく書き込まれていない可能性があると思われたので、設定した直後にキー値を取得して確認しました。

上記のコードの行をコメントアウトすると、入力した値が返されSession::put('abc')ます。したがって、データの書き込みにエラーはありません。

ここでの問題nullは、最初のリクエストの後に設定したにもかかわらず、常に値が返されることを取得しようとしていることです。

私はここで何かが欠けていますか?


編集

データベースをドライバーとして使用すると、セッションはデータベースに保存されません。エラーは出力されません。ドキュメントで説明されているように、データベースの実装はセッションテーブルスキーマで正しく行われました。

4

2 に答える 2

0

このスニペットを試してください。未テストですが、動作することは間違いありません。

if(Session::has('abc'))
{
    return Session::get('abc');
} else {
    Session::put('abc', 'some value');
    return true;        
}
于 2012-12-07T10:15:03.160 に答える