2017-03-16 4 views
0

http://php.net/manual/en/class.sessionhandler.php#example-5380(例1)のような内部ファイルハンドラでカスタムセッションハンドラを実装します。'ファイル'でカスタムセッションハンドラを使用してuse_strict_modeを動作させることはできません

しかし、session.use_strict_mode = 1で。

私は、このサンプルコードをテストしようとしているが、私はそれが仕事を得るように見えることはできません。

session_module_name('files'); 
ini_set('session.use_strict_mode', '1'); 

class MySessionHandler extends SessionHandler{} 
session_set_save_handler(new MySessionHandler(), true); 

session_start(); 
var_dump(session_id()); 

した後、既存のセッションファイルを再実行するスクリプトを削除し、それは同じで新しいファイルを作成しますid。

session_set_save_handler()がない場合、期待どおりに動作します。新しいファイルが新しいIDで作成されます。

答えて

0

私はこれを簡単に実装しました。

<?php 
session_module_name('files'); 
ini_set('session.use_strict_mode', '1'); 

session_set_save_handler(new MySessionHandler(), true); 

session_start(); 
var_dump(session_id()); 

class MySessionHandler extends SessionHandler 
{ 
    /** 
    * Getting full path to session file 
    * 
    * It's depend on internal realization of 'files' hander. 
    * Must be reviewed after each php release. 
    */ 
    private function getFullPathName(string $key) : string 
    { 
     if (empty($filename = session_save_path())) { 
      $filename = sys_get_temp_dir(); 
     } elseif (strpos($filename, ';') !== false) { 
      $data = explode(';', $filename); 
      $count = $data[0]; 
      $filename = end($data); 
      for ($i = 0; $i < $count; $i++) { 
       $filename .= '/' . $key[$i]; 
      } 
     } 
     return $filename.'/sess_'.$key; 
    } 

    public function validateId($key) 
    { 
     return file_exists($this->getFullPathName($key)); 
    } 
} 

私はこれがbugだと思いますが、そうでないかもしれません。

関連する問題