セッション|関数
if (!isset($__session_inc__)){
$__session_inc__=1;
//require("cookie.inc.php3");
# ------------- -------------------------------------------------- ----
# セッション管理 v1.0 21.6.1998
# (c) Wild Karl Heinz
#
# This Include handle セッションベースの変数処理
#
# ご自由にお使いください。もっと機能的にしたら
# コピーを送っていただけると嬉しいです。
#
# Mysql_connect を忘れないでください!
#
# データベース構造
# テーブル 'session' のテーブル構造
#
# CREATE TABLE session (
# id int(11) DEFAULT '0' NOT NULL auto_increment,
# sid varchar(20) DEFAULT '' NOT NULL、
# val blob、
# timestamp(14)、
# 主キー (id)、
# KEY sid (sid)、
# UNIQUE sid_2 (sid)
# );
#
# ここでは、データベースから古いセッションを削除する cron ジョブが欠落しています
# ----------------------------- --------------------------------------
// 请注意上面被注释掉的CREATE TABLE 句、
// この句は、使用するデータベース上で実行する必要があります。
// テーブル名はセッションでなくてもよく、次の $sess_table を設定する必要があります。
// この場所には設定が必要です
// 一般的な構築ではなく、セッションを表名として使用します
$sess_db = 'dbname';
$sess_table = 'セッション';
# ----------------------------------------------- -----
# Session_CheckID - セッション ID を返します
# パラメータ....: cookie 保存時間间(以分钟计)
# も設定表示できません この cookie は当前のセッションにのみ存在します
#これは、ASP 内の SESSION の時間と同様です。
# 戻り値....: 唯一のセッション ID (cookie として保存)
# ----------------- -----------------------------------
関数 Session_CheckID( $min )
{
global $sess_sid;
if( !$sess_sid ) {
$sess_sid = uniqid( SC ); //唯一の随机数
/*
if( $min > 0 ) {
SetCookie("sess_sid", $sess_sid, time()+($min*60), "/", "", 0 );
}
else {
SetCookie("sess_sid", $sess_sid, "", "/", "", 0 );
}
上は元のコードであり、問題が発生します。そのため、さらに優れた関数が使用されています。 ( 間違い );
}
else {
return( true );
}
}
# -------------------------------------- ---------------
# str2arr - 将字符串转换成セッション数组
# パラメータ....: string
# 返值...: 全局数组(それ实就是セッション)
#本関数数使用:将字符串转换成session数组
#如"session[username]=yourid&session[userpass]=12345"
#将会被转换成下面の数组
# session[username]="yourid"
# session[userpass]="12345"
#请注意関数split(),each(),list(),eval()の使用法。
# --------------- -------------------------------------------
関数 str2arr( $ts )
{
グローバル $セッション;
$vals = split( "&", $ts );
while( list($key,$val) = each($vals) ) {
list( $name, $wert ) = split( "=, $val );
if( $val ) eval( "$$name = "$wert";" );
}
}
# -------------------------------------- ---------------
# session_read() - 从SESSION表中取データ、转换成session数组
# パラメータ....: なし
# 戻り值。 .....: 如果读出データ,true を返す,そうでない場合 false を返す
#注意....: 用到了str2arr()这个関数数
# ----------- -----------------------------------------------
function session_read()
{
# セッション変数を保持するハッシュ配列
global $session;
global $sess_sid, $sess_db, $sess_table, $sess_error
$sel = "$sess_table から val を選択します。 sid = '$ sess_sid'";
$res = mysql_db_query( $sess_db, $sel );
if( mysql_numrows( $res ) ) {
$val = mysql_result( $res, 0, "val" );
str2arr( );
mysql_free_result( $res );
else {
return( false );
$sess_error = mysql_error() }
# ----------- --------------------------------------
# Split_Array() - セッション配列を文字列に変換します
# パラメータ...: 配列
# 戻り値...: 配列から変換された文字列
#
# Rasmus に感謝します (この人は PHP Inventor 出身のようです)
# 注: セッション配列を文字列に変換します
# たとえば、session[username]="yourid"
# session[userpass]="12345"
# は、「session[username]=yourid&session[userpass]=12345」に変換されます
#同時に、この関数は配列の要素もデータであるという状況を考慮します
#この関数は再帰関数として設計されています
# --------------- -- -------------------------------------
function Split_Array( $arr, $a = " ", $b = "", $c = "" )
{
while( list( $key, $val ) = each( $arr ) ) {
if( is_array( $val ) ) {
$ts .= Split_Array( $ ARR [$ Key],
(Strlen ($ a)? $ a: $ key),
(Strlen ($ B)? $ B: (STRLEN ($ a)? $ key: ""),
(
(
(
(
(
(
)(
($ c)?$ c:(strlen($ b)?$)); a] ":" ";
$ $key]=$val&";
---------------
# session_write - セッション配列を文字列に変換し、セッションテーブルに保存します
# パラメータ: なし
# 戻り値...: 入金が正常であれば true を返し、それ以外の場合は false を返します
# ---------------- ------------------ --------------------
function session_write()
{
# ハッシュ配列keep session-variables
global $session;
global $sess_sid, $sess_db, $sess_table;
# セッション Cookie を削除したい場合は、セッションを書き込む前に確認する必要があります
#配列
if( !$sess_sid ) { session_checkid( 0 ); }
$ts = Split_Array( $session );
if( $ts > "" ) { $ts = substr( $ts, 0, strlen( $ts ) - 1 ); }
$res = mysql_db_query( $sess_db, " sid = '$sess_s'") のセッションから * を選択します
if( mysql_numrows( $res ) == 0 ) {
$sel = " $sess_table に挿入 (id, sid, val, times) ";
$sel .= "values( 0, '$sess_sid', '$ts', NULL )";
}
else {
$sel = "更新$sess_table set val = '$ts', " Times = null wheresign = '$ sess_sid' "
}
if (! MySQL_DB_QUERY$ sess_error = MySQL_ERROR ();
Return (FALSE);
Else {Return (TRUE);}}
#--------------------- -------------------------
# session_del - 現在のセッションをすべてクリアします
# セッション テーブル内の現在のセッションに関連するレコードを削除します
#パラメータ....: ランダムなセッション ID
# 戻り値...: なし
# ------------------------ -- --------------
function session_del()
{
global $session, $sess_db, $sess_table, $sess_sid
$sel = "$sess_table から削除 (sid = '$) sess_sid'";
if( !mysql_db_query( $sess_db, $sel ) ) {
$sess_error = mysql_error();
}
$sess_sid = '';
}
}
?>