Ejemplo n.º 1
0
Archivo: P2Util.php Proyecto: poppen/p2
 /**
  * クッキーを消去する。変数 $_COOKIE も。
  *
  * @access  public
  * @param   string  $key  key, k1[k2]
  * @return  boolean
  */
 function unsetCookie($key, $path = '', $domain = null)
 {
     if (is_null($domain)) {
         $domain = P2Util::getCookieDomain();
     }
     // 配列をsetcookie()する時は、キー文字列をPHPの配列の場合のように、'' や "" でクォートしない。
     // それらはキー文字列として認識されてしまう。['hoge']ではなく、[hoge]と指定する。
     // setcookie()で、一時キーは[]で囲まないようにする。(無効な処理となる。) k1[k2] という表記で指定する。
     // setcookie()では配列をまとめて削除することはできない。
     // k1 の指定で k1[k2] は消えないので、このメソッドで対応している。
     // $keyが配列として指定されていたなら
     $cakey = null;
     // $_COOKIE用のキー
     if (preg_match('/\\]$/', $key)) {
         // 最初のキーを[]で囲む
         $cakey = preg_replace('/^([^\\[]+)/', '[$1]', $key);
         // []のキーを''で囲む
         $cakey = preg_replace('/\\[([^\\[\\]]+)\\]/', "['\$1']", $cakey);
         //var_dump($cakey);
     }
     // 対象Cookie値が配列であれば再帰処理を行う
     $cArray = null;
     if ($cakey) {
         eval("isset(\$_COOKIE{$cakey}) && is_array(\$_COOKIE{$cakey}) and \$cArray = \$_COOKIE{$cakey};");
     } else {
         if (isset($_COOKIE[$key]) && is_array($_COOKIE[$key])) {
             $cArray = $_COOKIE[$key];
         }
     }
     if (is_array($cArray)) {
         foreach ($cArray as $k => $v) {
             $keyr = "{$key}[{$k}]";
             if (!P2Util::unsetCookie($keyr, $path, $domain)) {
                 return false;
             }
         }
     }
     if (is_array($cArray) or setcookie("{$key}", '', time() - 3600, $path, $domain)) {
         if ($cakey) {
             eval("unset(\$_COOKIE{$cakey});");
         } else {
             unset($_COOKIE[$key]);
         }
         return true;
     }
     return false;
 }
Ejemplo n.º 2
0
/**
 * @return  Session|null|die
 */
function _startSession()
{
    global $_conf;
    // 名前は、セッションクッキーを破棄するときのために、セッション利用の有無に関わらず設定する
    session_name('PS');
    $cookie = session_get_cookie_params();
    session_set_cookie_params($cookie['lifetime'], '/', P2Util::getCookieDomain(), $secure = false);
    // css.php は特別にセッションから外す。
    //if (basename($_SERVER['SCRIPT_NAME']) == 'css.php') {
    //    return null;
    //}
    if ($_conf['use_session'] == 1 or $_conf['use_session'] == 2 && empty($_COOKIE['cid'])) {
        if ($_conf['session_save'] == 'p2' and session_module_name() == 'files') {
            _prepareFileSession();
        }
        return new Session();
    }
    return null;
}