[PHP-users 26748] Re: セッションの変更
古川敦史
agl @ mbi.nifty.com
2005年 9月 3日 (土) 18:06:23 JST
古川@フリーランスSEです。
セッションはブラウザを開いている間は残ります。
index.php側でセッションをsession_destoryで破棄するか?
該当のクラスを明示的に書き換えるほうがいいと思います。
自分の場合は、下記の自作クラス+reference で後はPHP任せです。
-- agSession.inc
<?php
//朋在来遠
// $Id: agSession.inc,v 1.5 2005/08/31 15:32:54 atsushifx Exp $
/**
* クラス用セッションマネージャー
*
* 指定したクラスのインスタンスをセッションから取得する
* セッションが始まっていない場合は、新しくインスタンスを作成してセッションに登録する
*
* Example:
* <code>
* $var =& agSession::manager(className, [init1], [init2]);
* $var->var1 = xxx;
* </code>
*
* @package jp.sf.aglib
*
* @copyright Copyright © 2003-2005 <a href="http://aglib.sourceforge.jp/">aglib Project</a>
* @license http://www.opensource.org/licenses/bsd-license.php
* @license http://www.jp.freebsd.org/www.freebsd.org/ja/copyright/freebsd-license.html
*
* @since 1.00
* @version $Revision: 1.5 $
* @create 2004-05-05
*
* @author Furukawa Atsushi <atsushifx @ aglabo.com>
*/
/**
* agSession: クラス用セッションマネージャー
*
* 指定したクラスをセッションから取得する
* セッションにないときは、新たにインスタンスを作成しセッションに登録する
*
* @version 1.00.02
* @since 1.10
*
* @author Furukawa Atsushi <atsushifx @ aglabo.com>
*/
class agSession {
/**
* インスタンス取得
*
* 指定したクラスのインスタンスをセッションから取得する
* 必要ならセッションにクラスを登録する
*
* @param string セッションから取得するクラス
* @param miexed(opt) 初期化パラメータ1
* @param miexed(opt) 初期化パラメータ2
* @return 登録したインスタンス/false:Illegal Class
*/
function &manager($class, $init1=null, $init2=null)
{
if ($class=='' || !class_exists($class)) return false;
if (agSession::is_registered($class)) {
$instance = & $_SESSION[AG_SESSION_KEY][$class];
} else {
$instance = & agSession::register($class, $init1, $init2);
}
return $instance;
}
/**
* 指定したクラスがセッションに登録されているかチェックsる
*
* @param string クラス名
* @return bool true:登録済み/false:未登録/クラスではない
*/
function is_registered($class)
{
if (is_object($class)) { $class = get_class($class); }
if ($class=='' || !class_exists($class)) return false;
return isset($_SESSION[AG_SESSION_KEY][$class]);
}
/**
* インスタンス登録
*
* インスタンスをセッションに登録する
*
* @param mixed 登録するインスタンス/クラス
* @param [miexed] 初期化パラメータ1
* @param [miexed] 初期化パラメータ2
* @return &object 登録したインスタンス
*/
function & register($instance, $init1=false, $init2=false)
{
if (is_object($instance)) {
$class = get_class($instance);
} else {
$class = $instance;
$instance = & new $class($init1, $init2);
}
$_SESSION[AG_SESSION_KEY][$class] = $instance;
$instance = & $_SESSION[AG_SESSION_KEY][$class];
return $instance;
}
/**
* インスタンス登録解除
*
* クラスのインスタンスをセッションから解除する
*
* @param mixed セッションに登録していたインスタンス
* @return NULL NULL
*/
function unregister($class)
{
if (is_object($class)){ $class = get_class($class); }
if ($class) { unset($_SESSION[AG_SESSION_KEY][$class]); }
return NULL;
}
/**
* セッション終了
*
* セッションを終了する
*
* @param void
* @return bool true:終了成功/false:終了失敗
*/
function destroy()
{
if (isset($_COOKIE[agSession::getName()])) {
setcookie(agSession::getName(), '', time()-42000, '/');
}
$er = session_destroy();
return $er;
}
/**
* セッション名取得
*
* @param void
* @return string セッション名
*/
function getName()
{
return session_name();
}
/**
* セッションID取得
*
* @param void
* @return string セッションID
*/
function getId()
{
return session_id();
}
/**
* SID有効/無効化設定
*
* @param bool SID有効化フラグ(true:有効/false:無効)
* @return bool 現在のSID設定
*/
function useSID($use = null)
{
$old_use_sid = ini_get('session.use_trans_sid');
if (is_bool($use)) {
ini_set('session.use_trans_sid', $use);
}
return $old_use_sid;
}
/**
* SID取得
*
* @param void
* @return bool 現在のSID設定
*/
function sid()
{
return agSession::getName() . "=" . agSession::getId();
}
}
?>
--
-- /Private
aglib (http://aglib.sourceforge.jp)、開発中
//Furukawa Atsushi / 古川 敦史
E-Mail: agl @ violet.plala.or.jp
Y!Messanger: KeePeeLue
Skype: atsushifx
MOBILE: 070-5010-5225
FAX: 020-4622-3018
HomePage: http://www.aglabo.com/agl/
http://plaza.rakuten.co.jp/atsuhsifx/
PHP-users メーリングリストの案内