Skip to content

Instantly share code, notes, and snippets.

@ts0818
Last active September 29, 2015 06:11
Show Gist options
  • Save ts0818/e86785462d53562d9df5 to your computer and use it in GitHub Desktop.
Save ts0818/e86785462d53562d9df5 to your computer and use it in GitHub Desktop.
session
<?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