Last active
September 29, 2015 06:11
-
-
Save ts0818/e86785462d53562d9df5 to your computer and use it in GitHub Desktop.
session
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* PpSessionクラス */ | |
class PpSession { | |
protected $timeout; // セッションタイムアウト時間 | |
// セッション存在チェック | |
// ! @return boolean true:セッション開始中 | |
public function sessionExists( ) { | |
if ( isset( $_COOKIE[ session_name( ) ] )) { | |
return true; | |
} | |
return false; | |
} | |
// セッション開始とタイムアウトチェック | |
// ! @return boolean true:セッションタイムアウトしていない | |
// ! @return boolean false:セッションタイムアウトした | |
public function start( ){ | |
session_start( ); | |
$now = time( ); | |
$lastreq = $this->get( 'lastreq', $now ); // 前回アクセス時刻を取得 | |
$this->set( 'lastreq', $now ); // アクセス時刻を保存 | |
if (( $lastreq + $this->timeout ) <= $now) { | |
return false; | |
} | |
return true; | |
} | |
// セッションIDを生成しなおす | |
public function regenerate( ) { | |
session_regenerate_id( ); | |
} | |
// クッキー削除要求処理 | |
public function delCookie( ) { | |
if ($this->sessionExists( )) { | |
$params = session_get_cookie_params( ); | |
setcookie(session_name( ), ' ', time( ) - 42000, | |
$params[ 'path' ], $params[ 'domain' ], | |
$params[ 'secure' ], $params[ 'httponly' ]); | |
} | |
} | |
// セッション終了処理 | |
public function endProc( ) { | |
$this->clear( ); | |
$this->delCookie( ); | |
session_destroy( ); | |
} | |
// セッション変数設定 | |
public function set( $key, $value ) { | |
$_SESSION[ $key ] = $value; | |
} | |
// セッション変数取得 | |
// @param string $key キー | |
// @param mixed $default 存在しない場合のデフォルト値 | |
// @return string セッション変数値 | |
public function get($key, $default = null) { | |
if (isset($_SESSION[$key])) { | |
return $_SESSION[$key]; | |
} | |
return $default; | |
} | |
// セッション変数削除 | |
// ! @param string $key | |
public function remove($key) { | |
if(isset($_SESSION[$key])) { | |
unset($_SESSION[$key]); | |
} | |
} | |
// セッション変数クリア | |
public function clear( ) { | |
$_SESSION = array( ); | |
} | |
} | |
// 質問データ | |
// 1つの変数の中に3つ分の答えを保持したいので、1ビットごとに答えのデータを割り当て | |
$qmsg = array(array( ' どこか遠くへ行きたい?', ' 遠くへ', ' 近場で' ), | |
array( ' 海と山どっちが好き?', ' 海が好き', ' 山が好き' ), | |
array( ' 暑いの寒いのどっちが苦手?', ' 暑いの', ' 寒いの' ) ); | |
$ans = 0; // 回答(ユーザーの答え) | |
$qno = 0; // 質問番号(いま何番目の質問に答えているのか) | |
$qcnt = count( $qmsg ) - 1; // 質問数 | |
// セッション管理クラス | |
$sess = new PpSession( 'SESSQANDA' ); | |
if ( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { | |
$sess->start( ); | |
$ans = (int)$sess->get( 'ans' ); | |
$qno = (int)$sess->get( 'qno' ); | |
if ( $qno >= 0 && $qno < $qcnt ) { | |
if ( isset( $_POST['a1'] )) { | |
$ans |= (1 << $qno); | |
} | |
$qno++; | |
} | |
$sess->set( 'ans', '$ans' ); | |
$sess->set( 'qno', '$qno' ); | |
}else{ | |
if ( $sess->sessionExists( )) { | |
$sess->start( ); | |
$sess->endProc( ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment